2017-01-02 2 views
0

Je voudrais créer une fenêtre quand dans le panneau de gauche est le menu (avec les boutons à bascule) et dans le panneau de droite sont des vues. Lorsque je clique sur le bouton bascule, la vue est visible et une autre vue est masquée. Mais mon code fait une vue ouverte malgré lui. Ceci est mon code:Menu avec 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}}"/> 

code Derrière:

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; 
     } 
    } 

Répondre

1

Th est ma solution:

<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

je suppose, la mise en IsChecked comme faux en boucle causant ce problème, parce que si vous avez une unChecked défini et mis en « _Les » là, au cours _Les deuxième itération peut tenir la ToggleButton sans contrôle, mettre un point d'arrêt et il vérifier vous-même, vous pouvez éviter cela en incluant le drapeau comme ci-dessous,

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

J'ai conçu une fenêtre personnalisée chrome, un menu déroulant et un bouton à bascule. lorsque la propriété IsCheced du bouton bascule est définie sur true, le menu déroulant est ouvert avec une animation sympa et lorsque vous désactivez l'option flyout fermée.

  1. Afficher l'état flyout menu is open

  2. Hide État flyout menu is closed