2017-04-27 2 views
2

UserControl에서 파생 된 WPF에서 컨트롤이 있습니다. 컨트롤에 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을 위해이 :

<UserControl.ContextMenu> 
    <ContextMenu> 
     <!-- other menu items here --> 
     <MenuItem 
      Header="Draggable" 
      IsCheckable="True" 
      Click="IsDraggableMenuItemClick" 
      IsChecked="{Binding Path=MyUserControlsNameProperty, ElementName=IsDraggable}" /> 
    </ContextMenu> 
</UserControl.ContextMenu> 

이있는 UserControl을 사용하여, 나는 외부 UserControl을 내부의 메인 창에 하나 하나 추가 한 . 바깥 쪽 컨트롤에서 확인 가능한 MenuItem은 예상대로 작동하지만 내부에서는 IsDraggable이 거짓 일 때 검사되고, 맞으면 선택이 해제됩니다.

어떻게 될 수 있습니까?

+0

아마도 MenuItem에서 클릭 처리기를 제거하기 만하면됩니다. IsCheckable을 true로 설정하고 바인딩을 IsChecked로 설정하면 충분합니다. – Clemens

답변

0

IsDraggable 속성을 이벤트 처리기에서 명시 적으로 설정하는 이유는 무엇입니까? 당신은 당신의 UserControl 속성에 MenuItemIsChecked 속성을 바인딩해야 하나 :

<MenuItem 
    Header="Draggable" 
    IsCheckable="True" 
    Checked="MenuItem_Checked" Unchecked="MenuItem_Unchecked" /> 

private void MenuItem_Unchecked(object sender, RoutedEventArgs e) 
{ 
    this.IsDraggable = false; 
} 

private void MenuItem_Checked(object sender, RoutedEventArgs e) 
{ 
    this.IsDraggable = true; 
} 

하지만하지 :

<UserControl.ContextMenu> 
    <ContextMenu> 
     <!-- other menu items here --> 
     <MenuItem 
      Header="Draggable" 
      IsCheckable="True" 
      IsChecked="{Binding Path=PlacementTarget.IsDraggable, RelativeSource={RelativeSource AncestorType=ContextMenu}}" /> 
    </ContextMenu> 
</UserControl.ContextMenu> 

또는MenuItemCheckedUnchecked eventw 처리 양자 모두.

관련 문제