【问题标题】:XAML click event handler not triggeringXAML 单击事件处理程序未触发
【发布时间】:2012-12-21 16:38:34
【问题描述】:

由于某种原因,我无法让处理程序触发点击功能。当我单击时,我会听到“bing”的声音,好像我做错了什么。这是一个 Windows 8 应用程序全屏。我觉得好像整个屏幕都无法点击鼠标。这是一个嵌套在 XAML 接口内的 MonoGame 项目。控制游戏“菜单”的代码如下:

<StackPanel Height="768" VerticalAlignment="Bottom">
        <ListView Name="InGameMenu" Width="300" HorizontalAlignment="Stretch" Background="Orange" Height="auto" Padding="30 0 0 0">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Button FontSize="40" Content="{Binding}" Click="MenuElementSelected" IsEnabled="True"></Button>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ListView>
</StackPanel>

加载到列表中的元素只是字符串。关于可能发生的事情有什么想法吗?事件处理程序是

    private void MenuElementSelected(object sender, RoutedEventArgs e)
    {
        Button obj = sender as Button;

        switch ((string)obj.Content)
        {
            case "Resume":
                {
                    _game.resume();
                    break;
                }
            case "Restart":
                {
                    _game.restart();
                    break;
                }
        }
    }

但它甚至不会触发内部的断点。

非常感谢任何帮助!

编辑:

整个东西坐落在一个 SwapChainBackgroundPanel 将 MonoGame 转置到界面上。我还不确定,但这可能是问题的一部分。

【问题讨论】:

  • 我会尝试为您的按钮命名,然后以编程方式将处理程序附加到后面代码中的 Click 事件。然后,手动调用 Click 事件并尝试单步执行。
  • 不幸的是,这不起作用。同样的问题。
  • 我在一个页面上遇到了类似的问题我在 StackPanel 中有一个按钮,它没有触发事件处理程序。

标签: c# xaml windows-8 monogame


【解决方案1】:

修改您的switch 如下所示,并在default: 行上插入一个断点。然后,观察content变量的值是多少:

switch ((string)obj.Content)
{
    case "Resume":
        {
            _game.resume();
            break;
        }
    case "Restart":
        {
            _game.restart();
            break;
        }
    default:
        {
            var content = (string)obj.Content;
            break;
        }
}

【讨论】:

  • 已经检查过这个,因为 Button obj = sender as Button;在上面可以休息一下。我确实检查了你的建议以防万一,但效果相同。没有。永远不会调用事件处理程序。
【解决方案2】:

因此,当您编写大量代码时,您往往会忘记您已经完成了某些事情,最糟糕的是,您有时可能会错过明显的事情。提醒所有友好的程序员;当您尝试调试以前的问题时,请多加注意,以免它们溢出到他们可能创建的新问题(未被注意到)。我有以下代码行:

Windows.UI.Core.CoreWindow.GetForCurrentThread().IsInputEnabled = false;

在页面顶部初始化并完全错过了它。希望这可以帮助其他犯了这个愚蠢错误的人。我们每天要编写数千行代码,因此如果您在调试时不够小心,可能会发生这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2020-08-26
    • 2012-04-15
    • 2011-09-07
    • 1970-01-01
    • 2021-08-31
    • 2010-10-18
    相关资源
    最近更新 更多