ContextMenu立即关闭

时间:2015-06-08 17:45:25

标签: c# wpf xaml contextmenu

总编辑:

现在我可以重现我的错误,我真的不知道它为什么会发生。非常感谢任何帮助。

我有以下用户界面:

<Canvas>
    <Button Content="Remove and Readd Rectangle" Click="Button_Click"/>
    <ItemsControl ItemsSource="{Binding Rectangles}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Canvas/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Rectangle Width="{Binding Width}" Height="{Binding Height}" Stroke="Black" Fill="{Binding Color}" MouseUp="Rectangle_MouseUp" >
                    <Rectangle.Resources>
                        <RaAtt:RaAttached_BindingProxy Data="{Binding}" x:Key="Data"/>
                    </Rectangle.Resources>
                    <Rectangle.ContextMenu>
                        <ContextMenu IsOpen="{Binding Data.IsOpen, Source={StaticResource Data}}">
                            <MenuItem Header="Test"/>
                        </ContextMenu>
                    </Rectangle.ContextMenu>
                </Rectangle>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
        <ItemsControl.ItemContainerStyle>
            <Style>
                <Setter Property="Canvas.Left" Value="{Binding X}"/>
                <Setter Property="Canvas.Top" Value="{Binding Y}"/>
            </Style>
        </ItemsControl.ItemContainerStyle>
    </ItemsControl>
</Canvas>

现在我想通过Rectangle上的MouseClick打开ContextMenu:

private void Rectangle_MouseUp(object sender, MouseButtonEventArgs e)
{
    ((sender as Rectangle).DataContext as MyRectangle).IsOpen = true;
    e.Handled = true;
}

它适用于每个矩形。

当我单击按钮时,我删除并立即读取一个矩形:

private void Button_Click(object sender, RoutedEventArgs e)
{
    MyRectangle x = Rectangles.FirstOrDefault();
    Rectangles.Remove(x);
    Rectangles.Insert(0, x);
}

如果我在这个删除并读取的矩形上执行此操作,则ContextMenu会打开并立即再次关闭。

焦点日志:

启动应用程序:

'KeyboardFocus:' TestNamespace.MainWindow

右击:

'KeyboardFocus:' System.Windows.Controls.ContextMenu Items.Count:1
'KeyboardFocus:' TestNamespace.MainWindow

点击按钮:

'KeyboardFocus:' System.Windows.Controls.Button: Remove and Readd Rectangle

RightClick:

'KeyboardFocus:' System.Windows.Controls.ContextMenu Items.Count:1
'KeyboardFocus:' System.Windows.Controls.Button: Remove and Readd Rectangle
'KeyboardFocus:' System.Windows.Controls.ContextMenu Items.Count:1 //Why does this here happen?
'KeyboardFocus:' System.Windows.Controls.Button: Remove and Readd Rectangle

有谁知道为什么?

非常感谢你!

2 个答案:

答案 0 :(得分:0)

你没有在你的问题中包含足够的与应用程序功能相关的关键信息(相反,大量不相关的XAML格式化东西),所以答案是通用的:你必须研究代码隐藏的鼠标事件处理程序,即;

Rectangle_MouseUpRectangle_MouseDown

希望这可能会有所帮助。

答案 1 :(得分:0)

您是否尝试过调试,可能还有另一个UI元素被设置为以编程方式接收焦点,这会导致上下文菜单关闭?之前发生在我身上。

检查调用堆栈..设置一些断点..