WPF Listview按钮设置颜色?

时间:2016-09-04 18:32:32

标签: wpf listview button

我有一个绑定到vm集合的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>

1 个答案:

答案 0 :(得分:0)

您是否只想创建一个列表视图,其中的按钮可在单击项目(或按钮)时更改颜色?您可以利用ListViewItem的IsSelected属性

<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 =&#34; Single&#34;在ListView上如果你一次只想要一个按钮来改变背景或SelectionMode =&#34; Multiple&#34;如果您希望按钮一次更改背景时单击。