【问题标题】:Windows 8 Metro focus on gridWindows 8 Metro 专注于网格
【发布时间】:2012-08-04 21:14:05
【问题描述】:

我正在尝试使用 c# 和 xaml 制作一个简单的 Windows 8 Metro 游戏。我一直无法触发 KeyDown 事件。我认为这可能是因为网格没有焦点。如果是这种情况,我将如何在我的代码中赋予网格焦点?感谢您的帮助。

这是我的代码: xaml中的网格

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}" 
      KeyDown="Grid_KeyDown" KeyUp="Grid_KeyUp" x:Name="myGrid"
      >
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
    <StackPanel Orientation="Vertical">
        <StackPanel Orientation="Horizontal">
            <TextBlock FontSize="30" Margin="10" x:Name="statusBox">Status</TextBlock>
        </StackPanel>
    </StackPanel>

和c#中的事件处理程序

    private void Grid_KeyDown(object sender, KeyRoutedEventArgs e)
    {
        statusBox.Text = "Key down";
    }

【问题讨论】:

    标签: c# xaml windows-8 microsoft-metro winrt-xaml


    【解决方案1】:

    CoreWindow 级别而不是网格级别挂钩事件。在您的 C# 中,执行类似 ...

    CoreWindow.GetForCurrentThread().KeyDown += Window_KeyDown;
    

    Window_Keydown 是一种方法,可代替您当前拥有 Grid_KeyDown 的位置。

    【讨论】:

    • 我在尝试构建时收到此错误。错误 1 ​​'Window_KeyDown' 没有重载匹配委托 'Windows.Foundation.TypedEventHandler' 如果我理解正确,那行应该进入我的构造函数,我应该替换 Grid_KeyDown使用 Window_KeyDown。
    • 没关系,我想通了。我需要 Window_KeyDown 来获取 KeyEventsArgs 而不是 KeyRoutedEventsArgs。感谢您的帮助。
    • 谢谢,我想知道有多少其他人关注了code.msdn.microsoft.com/windowsapps/Input-3dff271b 的样本,但没有成功。想知道为什么您无法从 Grid 元素中向上/向下捕捉键盘。
    • 试图让这样的东西工作非常令人沮丧......我是一个经验丰富的.net和wpf开发人员,它不应该那么难。感谢你的回答。 MSDN 示例在该主题上完全错误(告诉您在网格级别处理我从未工作过的事件)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    相关资源
    最近更新 更多