gpt4 book ai didi

c# - 具有自定义边框的 WPF 选定 ListBoxItem

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:12 28 4
gpt4 key购买 nike



我正在尝试创建一个 ListBoxItem 模板,该模板在选择时将带有圆角边框。我得到了这个 xaml,它在选择时不起作用:

<ListBox x:Name="filtersListBox" Grid.Row="1" 
Background="Transparent" BorderThickness="0"
ItemsSource="{Binding FilterItems}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
</Style.Resources>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Center">
<Border CornerRadius="8" BorderThickness="0" BorderBrush="Orange"
Margin="2" Background="Transparent" Name="itemBorder"
Width="275" VerticalAlignment="Center"
FocusManager.IsFocusScope="True" Focusable="True">
<Border.Effect>
<DropShadowEffect BlurRadius="1" ShadowDepth="2" Color="DarkOrange" Opacity="0.3"/>
</Border.Effect>
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<Trigger Property="UIElement.IsFocused" Value="True">
<Setter Property="Background" Value="Blue"/>
</Trigger>
<EventTrigger RoutedEvent="Border.MouseEnter">
<BeginStoryboard>
<Storyboard>
<ThicknessAnimation Duration="0:0:0.25"
To="2"
Storyboard.TargetProperty="BorderThickness"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="Border.MouseLeave">
<BeginStoryboard>
<Storyboard>
<ThicknessAnimation Duration="0:0:0.25"
To="0"
Storyboard.TargetProperty="BorderThickness"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<TextBlock Text="{Binding Text}" Margin="10, 2"/>
</Border>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

这就是我正在处理的列表框。
MouseEnter 和 MouseLeave 事件,效果很好!
但是,UIElement.IsFocused 的触发器不起作用。

如有任何建议,我们将不胜感激! :)
谢谢,亚历克斯。

最佳答案

这很容易做到,我很惊讶还没有人建议这样做。定义两个 DataTemplate 或两个 ControlTemplate,一个用于默认外观,一个用于选定外观。然后只需添加此 Style(第一个示例使用 DataTemplate):

<Style x:Key="SelectionStyle" TargetType="{x:Type ListBoxItem}">
<Setter Property="ContentTemplate" Value="{StaticResource DefaultTemplate}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="ContentTemplate" Value="{StaticResource SelectedTemplate}" />
</Trigger>
</Style.Triggers>
</Style>

你会像这样使用它:

<ListBox ItemContainerStyle="{StaticResource SelectionStyle}" ... />

这是另一个使用两个 ControlTemplate 的示例(以相同的方式使用):

<Style x:Key="SelectionStyle" TargetType="{x:Type ListBoxItem}">
<Setter Property="Template" value="{StaticResource DefaultTemplate}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Template" value="{StaticResource SelectedTemplate}" />
</Trigger>
</Style.Triggers>
</Style>

我将让您按照您最了解的方式定义项目的外观。最后一点……如果您使用此方法(使用 ControlTemplate),请确保您添加了一个 ContentPresenter,以便项目的内容仍会显示。查看Control.Template Property MSDN 上的一个例子页面。

关于c# - 具有自定义边框的 WPF 选定 ListBoxItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20117675/

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