我有一个 WPF 应用程序,顶部有一个“工具栏”部分,下面是主要内容。
工具栏中的按钮间歇性地停止工作一段时间(我无法创建一组可靠的操作来重现该问题)。当鼠标经过它们时,不会出现“突出显示”,并且单击它们时不会执行任何操作。
按钮可见并且似乎已启用。
这是主窗口的一小段(我无法获得简化版本来实际重现该错误):
<Window>
<Grid Name="MainPanel">
<Grid.RowDefinitions>
<RowDefinition Height="90"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<ToolBar Name="MainToolbar" HorizontalAlignment="Left" OverflowMode="Never">
<Button Click="OpenWeb"/>
</ToolBar>
<StackPanel HorizontalAlignment="Right">
<ToolBar>
<Button Name="StudyListTB" Command="local:CustomCommands.ShowStudyList" Margin="5"/>
<Button Name="StudyViewTB" Command="local:CustomCommands.ShowStudyView" Margin="5"/>
<Button Name="ScoreViewTB" Command="local:CustomCommands.ShowStudyScore" Margin="5"/>
<Button Name="ExportTB" Command="local:CustomCommands.CreateReport" Margin="5"/>
<Button Name="DebugTestTB" Command="{Binding DebugTestCommand}" Margin="5"/>
</ToolBar>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Server}" />
<TextBlock Text="{Binding UserName}" />
</StackPanel>
</StackPanel>
<Grid>
<!-- Main Section-->
</Grid>
</Grid>
</Window>
两个工具栏的问题都是相同的,一个直接位于网格中,另一个位于堆栈面板中。
我使用 Snoop 来了解更多信息。当问题发生时,“点击”事件似乎停止在“工具栏面板”阶段。
这通常发生在主要部分的“一些使用”之后。我无法找出一组一致的操作,并且在大多数情况下,它们没有我在工具栏上看到的效果。应用程序的其余部分(主要部分中的所有内容以及用于关闭应用程序的标题栏)工作正常。
主数据部分中的某些操作(并不总是相同)似乎也可以使其恢复正常工作。有时,就像单击一个复选框一样简单,但我找不到与工具栏相关的操作。
Snoop 没有给我答案,为什么事件不再是 ToolBarPanel,而当应用程序正常工作时(这是大多数时间),事件一直到按钮都没有问题。
我的问题:知道如何调试正在发生的事情吗? (或者你真的知道可能发生什么吗:))
我已设法解决我的问题,但我不确定问题是什么。
应用程序使用带有 RoatedUICommand 成员的静态类,并在 XAML 中创建 CommandBinding 来链接到正确的函数,然后在按钮的 Command 属性中使用这些命令绑定。
通过在 ViewModel 类中创建 ICommand 并将按钮的 Command 属性绑定到这些命令来更改为 MVVM 方式,一切正常。而且代码更好! :-)