2017-01-02 4 views
0

왼쪽 패널의 메뉴 (토글 버튼 포함)와 오른쪽 패널의보기가있는 창을 만들고 싶습니다. 전환 버튼을 클릭하면보기가 표시되고 다른보기는 숨겨집니다. 하지만 내 코드는 자신에도 불구하고 열린 뷰를 제공합니다.ToggleButtons가있는 메뉴

<StackPanel Grid.Column="0"> 
    <ToggleButton Name="Button1" Checked="MenuItem_Checked"> 
    <ToggleButton Name="Button2" Checked="MenuItem_Checked"> 
</StackPanel> 
<administration:View1 Grid.Column="1" 
           Visibility="{Binding ElementName=Button1, Path=IsChecked, UpdateSourceTrigger=PropertyChanged, 
           Converter={StaticResource BooleanToVisibilityConverter}}"/> 
<administration:View2 Grid.Column="1" 
           Visibility="{Binding ElementName=Button2, Path=IsChecked, UpdateSourceTrigger=PropertyChanged, 
           Converter={StaticResource BooleanToVisibilityConverter}}"/> 

코드 뒤에 : 이 내 코드입니다

private void MenuItem_Checked(object sender, RoutedEventArgs e) 
    { 
     var el = sender as ToggleButton; 
     if (Equals(_current, el)) 
      return; 
     _current = el; 
     foreach (var menuChild in Menu.Children) 
     { 
      ToggleButton button = menuChild as ToggleButton; 
      if (button == null) continue; 
      if (!Equals(button, _current)) 
       button.IsChecked = false; 
     } 
    } 

답변

1

목 는 나의 해결책이다 :

<View1.Resources> 
    <Style TargetType="View1"> 
       <Setter Property="Visibility" Value="Hidden"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=Button1, Path=IsChecked, UpdateSourceTrigger=PropertyChanged}" Value="True"> 
         <Setter Property="Visibility" Value="Visible"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
</View1.Resources> 
2

당신이 가지고있는 경우, 체크되지 않는 정의하고있다 "_current"를 설정하기 때문에 나는이 문제를 일으키는 루프에서 거짓의 IsChecked 설정, 추측, 거기에 중단 점을 넣어 직접 확인, 확인되지 않은 ToggleButton을을 보유 할 수 초 반복 _current 동안, 당신은 다음과 같은 플래그를 포함하여이 문제를 피할 수

bool internalChange = false; 
    private void MenuItem_Checked(object sender, RoutedEventArgs e) 
    { 
     if (!internalChange) 
     { 
      var el = sender as ToggleButton; 
      if (Equals(_current, el)) 
       return; 
      _current = el; 
      foreach (var menuChild in Menu.Children) 
      { 
       ToggleButton button = menuChild as ToggleButton; 
       if (button == null) 
        continue; 
       if (!Equals(button, _current)) 
       { 
        internalChange = true; 
        button.IsChecked = false; 
        internalChange = false; 
       } 
      } 
     } 
    } 
1

나는 맞춤 윈도우 크롬, 플라이 아웃 메뉴 및 토글 버튼을 디자인했다. 토글 버튼 IsCheced 속성을 true로 설정하면 플라이 아웃 메뉴가 멋진 애니메이션으로 열리고 토글 해제되면 플라이 아웃이 닫힙니다.

  1. 표시 상태 flyout menu is open

  2. 숨기기 상태 flyout menu is closed