2
我在从UserControl派生的WPF中有一个控件。该控件具有名为IsDraggable
的依赖项属性。它的实现是这样的:WPF绑定到自定义DependencyProperty - IsChecked有时候是相反的属性值
public static readonly DependencyProperty IsDraggableProperty =
DependencyProperty.Register(nameof(IsDraggable), typeof(bool), typeof(MyUserControl));
public bool IsDraggable
{
get { return (bool)this.GetValue(IsDraggableProperty); }
set { this.SetValue(IsDraggableProperty, value); }
}
private void IsDraggableMenuItemClick(object sender, RoutedEventArgs e)
=> this.IsDraggable = !this.IsDraggable;
在XAML中,有一个文本菜单的用户控件:
<UserControl.ContextMenu>
<ContextMenu>
<!-- other menu items here -->
<MenuItem
Header="Draggable"
IsCheckable="True"
Click="IsDraggableMenuItemClick"
IsChecked="{Binding Path=MyUserControlsNameProperty, ElementName=IsDraggable}" />
</ContextMenu>
</UserControl.ContextMenu>
使用该用户控件,我加入了一个到主窗口和一个外部用户控件内。在外部控制中,可检查MenuItem
的工作方式与预期的类似,但在内部控制中,检查IsDraggable
是否为假,并在其为真时取消选中。
这是什么原因造成的?
也许只是从MenuItem中删除Click处理程序。将IsCheckable设置为true并且绑定IsChecked应该足够了。 – Clemens