WPF 事件在工具栏面板阶段停止

问题描述 投票:0回答:1

我有一个 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,而当应用程序正常工作时(这是大多数时间),事件一直到按钮都没有问题。

我的问题:知道如何调试正在发生的事情吗? (或者你真的知道可能发生什么吗:))

c# wpf
1个回答
0
投票

我已设法解决我的问题,但我不确定问题是什么。

应用程序使用带有 RoatedUICommand 成员的静态类,并在 XAML 中创建 CommandBinding 来链接到正确的函数,然后在按钮的 Command 属性中使用这些命令绑定。

通过在 ViewModel 类中创建 ICommand 并将按钮的 Command 属性绑定到这些命令来更改为 MVVM 方式,一切正常。而且代码更好! :-)

© www.soinside.com 2019 - 2024. All rights reserved.