私はWPFでUserControlから派生したコントロールを持っています。コントロールにはIsDraggable
という名前の依存関係プロパティがあります。それは、次のように実装されます:XAMLで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;
、のContextMenuは、ユーザーコントロールのためにそこにある:
<UserControl.ContextMenu>
<ContextMenu>
<!-- other menu items here -->
<MenuItem
Header="Draggable"
IsCheckable="True"
Click="IsDraggableMenuItemClick"
IsChecked="{Binding Path=MyUserControlsNameProperty, ElementName=IsDraggable}" />
</ContextMenu>
</UserControl.ContextMenu>
このユーザーコントロールを使用して、私は外側のユーザーコントロール内のメインウィンドウに1、および1つ追加されました。外側のコントロールでは、チェック可能なMenuItem
は期待どおりに機能しますが、内側のコントロールではIsDraggable
がfalseのときにチェックされ、trueのときはチェックされません。
この原因は何ですか?
おそらく、MenuItemからClickハンドラを削除するだけです。 IsCheckableをtrueに設定し、IsCheckedをバインドするだけで十分です。 – Clemens