2016-09-04 10 views
0

У меня есть список, связанный с коллекцией vm. Список содержит кнопки, и я пытаюсь добиться того, что когда пользователь нажимает кнопку, он просто меняет цвет. Однако я не могу понять, как это сделать. Любая помощь будет принята с благодарностью.WPF Listview кнопка установить цвет?

<ListView 
    x:Name="GridControlOrders" 
    SelectionMode="Single" 
    ItemsSource="{Binding Orders}" 
    SelectedItem="{Binding Sale}" 
    ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
    ScrollViewer.VerticalScrollBarVisibility="Auto">     
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Button Style="{StaticResource StyleButtonOrders}"> 
       <Grid> 
        <TextBlock Text="{Binding DisplayData}" 
         HorizontalAlignment="Center" 
         VerticalAlignment="Center" 
         TextAlignment="Center"   
         TextWrapping="Wrap" /> 
       </Grid> 
      </Button> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <EventSetter Event="PreviewMouseDown" Handler="ItemOnPreviewMouseDown" /> 
      <EventSetter Event="PreviewMouseUp" Handler="ItemOnPreviewMouseUp" /> 
      <Setter Property="Width" Value="{Binding Source={x:Static p:Settings.Default}, Path=CardViewCardWidthItem, Mode=TwoWay}" /> 
      <Setter Property="Height" Value="{Binding Source={x:Static p:Settings.Default}, Path=CardViewCardHeightItem, Mode=TwoWay}" /> 
     </Style> 

    </ListView.ItemContainerStyle> 
    <ListView.Resources> 
     <Style TargetType="{x:Type ScrollBar}" BasedOn="{StaticResource StyleScrollBarTouchscreenNarrow}"/> 
    </ListView.Resources> 
</ListView> 


<Style TargetType="{x:Type Button}" x:Key="StyleButtonTouchscreen" BasedOn="{StaticResource {x:Type Button}}"> 
     <Setter Property="Width" Value="Auto"/> 
     <Setter Property="Height" Value="Auto"/>   
     <Setter Property="Margin" Value="0"/> 
     <Setter Property="Template" Value="{StaticResource ButtonTouchControlTemplate}"/> 
</Style> 

<ControlTemplate x:Key="ButtonTouchControlTemplate" TargetType="{x:Type ButtonBase}"> 
    <Border x:Name="border" 
     BorderBrush="{TemplateBinding BorderBrush}" 
     BorderThickness="{TemplateBinding BorderThickness}" 
     Background="{TemplateBinding Background}" 
     SnapsToDevicePixels="True"> 
      <ContentPresenter x:Name="contentPresenter" 
       ContentTemplate="{TemplateBinding ContentTemplate}" 
       Content="{TemplateBinding Content}" 
       ContentStringFormat="{TemplateBinding ContentStringFormat}" 
       Focusable="False" 
       HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
       Margin="{TemplateBinding Padding}" 
       RecognizesAccessKey="True" 
       SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
       VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
    </Border> 
    <ControlTemplate.Triggers> 
     <Trigger Property="ToggleButton.IsChecked" Value="True"> 
      <Setter Property="Background" TargetName="border" Value="Red"/> 
      <Setter Property="BorderBrush" TargetName="border" Value="Red"/> 
     </Trigger> 

     <Trigger Property="Button.IsDefaulted" Value="True"> 
      <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
     </Trigger> 

     <Trigger Property="IsPressed" Value="True"> 
      <Setter Property="Background" TargetName="border" Value="Orange"/> 
     </Trigger> 

     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Background" TargetName="border" Value="#FFF4F4F4"/> 
      <Setter Property="BorderBrush" TargetName="border" Value="#FFADB2B5"/> 
      <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="#FF838383"/> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

ответ

0

Вы просто хотите создать список с кнопками, которые меняют цвет при нажатии на элемент (или кнопку)? Вы можете воспользоваться свойством IsSelected в ListViewItem

<ListView.ItemContainerStyle> 
       <Style TargetType="ListViewItem"> 
        <Setter Property="DataContext" Value="{Binding}" /> 
        <Setter Property="Height" Value="30" /> 
        <Setter Property="HorizontalAlignment" Value="Stretch" /> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="ListViewItem"> 
           <Border Background="Transparent" > 
            <Button x:Name="button" HorizontalAlignment="Left" Width="150" Content="{Binding DisplayData}" IsHitTestVisible="False"/> 

           </Border> 
           <ControlTemplate.Triggers> 
            <Trigger Property="IsSelected" Value="True"> 
             <Setter TargetName="button" Property="Background" Value="Red"/> 
            </Trigger> 
           </ControlTemplate.Triggers> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </ListView.ItemContainerStyle> 

Кроме того, установите SelectionMode = «Single» на ListView, если вы хотите только одну кнопку, в то время, чтобы изменить фон или SelectionMode = «Multiple», если вы хотите кнопки за один раз, чтобы изменить фон при нажатии.

+0

Большое спасибо baye. Это именно то, что я ищу. – Saoirse

Смежные вопросы