2017-01-02 27 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

我猜,设置器isChecked假环路造成这个问题,因为如果你有任何未检查的定义,并设置“_current”那里,第二次迭代_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