总编辑:
现在我可以重现我的错误,我真的不知道它为什么会发生。非常感谢任何帮助。
我有以下用户界面:
<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
有谁知道为什么?
非常感谢你!
答案 0 :(得分:0)
你没有在你的问题中包含足够的与应用程序功能相关的关键信息(相反,大量不相关的XAML格式化东西),所以答案是通用的:你必须研究代码隐藏的鼠标事件处理程序,即;
Rectangle_MouseUp
和Rectangle_MouseDown
。
希望这可能会有所帮助。
答案 1 :(得分:0)
您是否尝试过调试,可能还有另一个UI元素被设置为以编程方式接收焦点,这会导致上下文菜单关闭?之前发生在我身上。
检查调用堆栈..设置一些断点..