我有这种风格:
<Style x:Key="SelectableListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Border Background="Transparent"
BorderBrush="{TemplateBinding BorderBrush}"
CornerRadius="4"
BorderThickness="2"
x:Name="IconBorder"
Margin="4,2,4,2">
<ContentPresenter/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter TargetName="IconBorder"
Property="BorderBrush"
Value="Blue" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我的问题是,当我使用我的样式时,我不知道在ListBox上设置哪个属性,以便它的ListBoxItems的边框最终会有所需的边框画笔。我也希望以我的风格为其他边框画笔做这项工作。
我希望能够有两个具有相同样式但不同边框颜色的列表框。我有一个ListBox:
<ListBox
ItemsSource="{Binding SelectedProduct.Pictures}"
SelectedItem="{Binding SelectedSet, Mode=TwoWay}"
ItemContainerStyle="{StaticResource ResourceKey= SelectableListBoxItemStyle}">
</ListBox>
更新..我试过这个:
<ListBox
ItemsSource="{Binding SelectedProduct.Pictures}"
SelectedItem="{Binding SelectedSet, Mode=TwoWay}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource SelectableListBoxItemStyle}">
<Setter TargetName="IconBorder" Property="BorderBrush" Value="Green" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
但是,我得到: 错误8无法在样式设置器上设置TargetName属性。
答案 0 :(得分:1)
您应该尝试使用相对源绑定,而不是使用TemplateBinding
。
BorderBrush="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Listbox}},
Path=BorderBrush}"
如果您希望使用与ListBox
定义的边框不同的边框,则需要向ResourceDictionary
添加画笔资源并将其应用于:{/ p>
<Listbox.Resources>
<SolidColorBrush x:Key="MyListBoxItemBorderBrush" Color="Red"/>
<Listbox.Resources>
然后在你的模板中:
BorderBrush="{StaticResource MyListBoxItemBorderBrush}"
如果您需要某些项目具有不同的边框,则需要查看StyleSelector。
答案 1 :(得分:0)
我不是百分百肯定,但我认为你可能需要一个自定义控件。至少我知道你可以用自定义控件来做到这一点!
如果你创建一个自定义控件,从ListBox扩展,包括你创建的这个样式,你可以在其中创建一个附加属性(类似于ItemBorderColor),你可以绑定到你的边框的BorderColor(实际上,对于一个选择效果,你可能想要在ControlTemplate()上创建一个触发器,它根据“IsSelected”属性将“ItemBorderColor”值应用于边框的BorderColor。
可能有一种纯粹的XAML方法,但我不知道......