2017-06-18 63 views
0

我正尝试在桌面应用程序内部创建一种用于导航的左侧菜单。我的想法是使用按钮作为列表视图项目,应该以这种方式行事:当我用鼠标悬停他们时,他们的背景应该改变颜色(变成darkCyan),当我点击一个它的背景颜色应该持久地改变(darkCyan),直到我点击在列表的另一个按钮上。问题是我正在使用DataTemplate属性来指定按钮的外观应该如何,我尝试应用触发器来更改ListView的ControlTemplate上的背景颜色。结果是,有时候背景颜色会改变,但与按钮相关的命令在其他情况下不会被触发。我认为我在树视图的错误元素中做了这些事情,但是我没有足够的树视图知识,所以我不理解我做错了什么。这里是XAML中,我定义样式的按钮的代码和ListView控件WPF将触发器应用于列表视图项目以更改背景

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

这里是我创建的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> 

任何人都可以帮助的代码? 感谢

回答

1

我以一个列表框,而不是一个ListView和设置ItemContainer是通过以下方式

<ListBox.ItemTemplate> 
    <ItemContainerTemplate> 
     <Button Content="{Binding Name}" 
       Command="{Binding DataContext.ChangePageCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" 
       Margin="0" /> 
    </ItemContainerTemplate> 
</ListBox.ItemTemplate> 
按钮解决问题
相关问题