2017-06-18 5 views
0

J'essaie de créer une sorte de menu de gauche pour la navigation dans l'application desktop. Mon idée est d'utiliser des boutons comme des éléments ListView qui devraient se comporter de cette façon: lorsque je passe la souris sur eux, l'arrière-plan devrait changer de couleur (devient darkCyan) et quand je clique sur sa couleur d'arrière-plan devrait changer (jusqu'à darkCyan) sur un autre bouton de la liste. Le problème est que j'utilise une propriété DataTemplate pour spécifier à quoi les boutons doivent ressembler et j'essaye d'appliquer les déclencheurs pour changer la couleur d'arrière-plan sur le ControlTemplate de ListView. Le résultat est que parfois la couleur d'arrière-plan change, mais la commande liée au bouton n'est pas déclenchée à d'autres moments. Je pense que je fais les choses dans le mauvais élément de la vue arborescente, mais je n'ai pas assez de connaissance de l'arborescence, donc je ne comprends pas ce que je fais de mal. Voici le code du XAML dans lequel je les styles définis pour les boutons et le ListViewWPF applique des triggers à la liste des éléments pour changer d'arrière-plan

<Window.Resources> 
    <DataTemplate DataType="{x:Type viewModels:TripViewModel}"> 
     <views:TripView /> 
    </DataTemplate> 

    <Style TargetType="{x:Type Button}"> 
     <Setter Property="Height" 
       Value="50" /> 
     <Setter Property="Background" 
       Value="#555D6F" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <Border> 
         <Grid Background="Transparent"> 
          <ContentPresenter HorizontalAlignment="Center" 
               VerticalAlignment="Center" /> 
         </Grid> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <Style TargetType="{x:Type ListViewItem}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ListViewItem}"> 
        <Border BorderBrush="Transparent" 
          BorderThickness="0" 
          Background="{TemplateBinding Background}"> 
         <ContentPresenter HorizontalAlignment="Center" 
              VerticalAlignment="Center" /> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsMouseOver" 
           Value="True"> 
          <Setter Property="Background" 
            Value="DarkCyan" /> 
         </Trigger> 
         <Trigger Property="IsSelected" 
           Value="True"> 
          <Setter Property="Background" 
            Value="DarkCyan" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 

Et voici le code dans lequel je crée le ListView

<ListView Name="MenuButtons" 
     ItemsSource="{Binding PageViewModels}" 
     Background="Transparent" 
     IsSynchronizedWithCurrentItem="True"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Button Content="{Binding Name}" 
        Command="{Binding DataContext.ChangePageCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" 
        Margin="0" /> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Tout le monde peut aider? Merci

Répondre

1

j'ai résolu le problème en utilisant un ListBox au lieu d'un ListView et le réglage de la ItemContainer à un bouton de la manière suivante

<ListBox.ItemTemplate> 
    <ItemContainerTemplate> 
     <Button Content="{Binding Name}" 
       Command="{Binding DataContext.ChangePageCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" 
       Margin="0" /> 
    </ItemContainerTemplate> 
</ListBox.ItemTemplate>