gpt4 book ai didi

c# - 更改选定颜色列表框

转载 作者:行者123 更新时间:2023-11-30 13:50:47 26 4
gpt4 key购买 nike

我想更改选定背景并让它显示带圆角的渐变。我搜索了谷歌,发现有些人确实通过覆盖默认颜色来更改所选颜色。有什么办法可以做到这一点?我在想有什么方法可以在选择项目时显示圆角边框作为背景?

最佳答案

这是 ListBoxItem 的默认样式(这是我们想要更改的)。如果您使用 Expression Blend 4,可以通过右键单击“对象和时间轴”控件中的列表框项目来“检索”此样式。

<Style x:Key="ListBoxItemStyle1" TargetType="{x:Type ListBoxItem}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
<Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
<Setter Property="Padding" Value="2,0,0,0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"
>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true"/>
<Condition Property="Selector.IsSelectionActive" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
</MultiTrigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

让我们抽出一些重要的部分,以便您学会自己做。

<Style x:Key="ListBoxItemStyle1" TargetType="{x:Type ListBoxItem}">

这是样式声明的开始。我们已经为它提供了一个 x:Key,以便可以从资源字典中检索它,并且我们已经为 ListBoxItem 设置了 TargetType。

现在,我们要查找要更改的样式部分。在本例中,我们将向下查找样式的一部分,即新 ControlTemplate 上的 MultiTrigger。

<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true"/>
<Condition Property="Selector.IsSelectionActive" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
</MultiTrigger>

此 MultiTrigger 需要 2 个属性来匹配值才能被激活。此触发器在激活时会将背景颜色更改为 Value="...",将前景色更改为 Value="..."。为了获得渐变背景,我们需要将 Background Value="..."中的值更改为不同的画笔。让我们创建一个快速的小渐变画笔(也非常丰富多彩!)

<LinearGradientBrush x:Key="GradientBrush" StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="Yellow" Offset="0.0" />
<GradientStop Color="Red" Offset="0.25" />
<GradientStop Color="Blue" Offset="0.75" />
<GradientStop Color="LimeGreen" Offset="1.0" />
</LinearGradientBrush>

现在让我们将其应用于此触发器的背景。

<Setter Property="Background" TargetName="Bd" Value="{StaticResource GradientBrush}"/>

现在,当此样式应用于 ListBoxItem 且 ListBoxItem IsSelected = True(和 Selector.IsSelectionActive = false)时,您将在列表框项目上看到渐变背景。

现在,您还想要圆角。如果我们走到 ControlTemplate 的顶部,我们将看到一个边框声明。

<Border x:Name="Bd"

在该声明中,我们要添加一个 CornerRadius 属性以使 ListBoxItem 的角变圆。

CornerRadius="5"

现在,您应该可以创建一个圆角半径、线性渐变背景的listboxitem。我希望你能从这里独立继续。

关于c# - 更改选定颜色列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5519845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com