【问题标题】:Listview fore color will be unchanged in selection modeListview 前景色在选择模式下将保持不变
【发布时间】:2017-01-18 16:56:01
【问题描述】:

我有以下 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>

【问题讨论】:

  • 嗯,最简单的方法是更改​​ xaml.cs 中的视觉状态 - 只需在 MouseClick 上将处理程序添加到 StackPanel 并命名所有必要的元素。比在处理程序中使用 VisualTree 找到这些元素并更改所需的参数。
  • 我真的不认为这是在 WPF 中完成的方式,您的方式是 WinForm 方式(IMO)。更清洁的解决方案是使用TriggersStyles。这是一个很好的例子:stackoverflow.com/questions/2388429/… 或这个:stackoverflow.com/questions/25414686/…

标签: c# wpf xaml listview textblock


【解决方案1】:

您应该区分项目内容和项目容器。处理项目选择样式应该是容器的责任。以下样式定义了 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2021-08-21
    相关资源
    最近更新 更多