Listview前色在选择模式下将保持不变

时间:2017-01-18 08:19:25

标签: c# wpf xaml listview textblock

我有以下XAML

但是我希望当用户框点击列表视图中的任何文本块时,我希望文本的前景色不变(当前更改为白色) 相反,我希望改变边框颜色 我怎么能这样做?

ListView x:Name="LV" ItemsSource= "{Binding  Lggv}"     SelectionChanged="dataGridData_SelectionChanged" >
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel >
                            <Border BorderThickness="1" BorderBrush="Black">
                                <TextBlock Text="{Binding Info }" AllowDrop="True"  >
                                    <TextBlock.Background>
                                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">                                              
                                            <GradientStop Color="#FFCEE6C6" Offset="0.008"/>
                                            <GradientStop Color="#FF9ECF8C" Offset="0.987"/>
                                        </LinearGradientBrush>
                                    </TextBlock.Background>



                                </TextBlock>


                            </Border>
                            <Grid >
                                <Grid.Background>
                                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                        <GradientStop Color="#FFC5DDFF" Offset="0"/>
                                        <GradientStop Color="#FFA8C8F7" Offset="1"/>
                                    </LinearGradientBrush>
                                </Grid.Background>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="1*"></ColumnDefinition>
                                    <ColumnDefinition Width="1*"></ColumnDefinition>
                                    <ColumnDefinition Width="1*"></ColumnDefinition>
                                </Grid.ColumnDefinitions>
                                <Border Grid.Column="0" BorderThickness="1" BorderBrush="Black">
                                    <TextBlock Text="{Binding DateTime}" ></TextBlock>
                                </Border>
                                <Border Grid.Column="1" BorderThickness="1" BorderBrush="Black">
                                    <TextBlock Text="{Binding ComPort}"></TextBlock>
                                </Border>
                                <Border Grid.Column="2" BorderThickness="1" BorderBrush="Black">
                                    <TextBlock Text="{Binding Data}" ></TextBlock>
                                </Border>
                            </Grid>
                        </StackPanel>
                    </DataTemplate>    


                </ListView.ItemTemplate>


            </ListView>

1 个答案:

答案 0 :(得分:0)

您应该区分项目内容和项目容器。处理项目选择样式应该是容器的责任。以下样式定义了具有一些基本属性的ListViewItem的可视表示的替换。根据您所需的视觉效果,您可能希望定义不同的风格。

将样式定义为资源:

<Style x:Key="ListViewItemStyle" TargetType="ListViewItem">
    <Setter Property="Margin" Value="3"/>
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListViewItem">
                <Border
                    Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}"
                    Padding="{TemplateBinding Padding}">
                    <ContentPresenter/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="BorderBrush" Value="Red"/>
        </Trigger>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="LightBlue"/>
        </Trigger>
    </Style.Triggers>
</Style>

当鼠标结束(背景颜色)和选择项目(红色边框)时,项目将以不同方式显示。前景应该保持不变。

用法:

<ListView ItemContainerStyle="{StaticResource ListViewItemStyle}">
    <!-- your other code -->
</ListView>