C# WPF XAML列表框所选项目边框颜色
我已经实现了一些listbox,其中包含边框和该边框中的网格C# WPF XAML列表框所选项目边框颜色,c#,wpf,xaml,listbox,mvvm-light,C#,Wpf,Xaml,Listbox,Mvvm Light,我已经实现了一些listbox,其中包含边框和该边框中的网格 <Style x:Key="SelectedHiglightStyle" TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource MaterialDesignListBoxItem}"> <Style.Resources> <SolidColorBrush x:Key="{x:Static S
<Style x:Key="SelectedHiglightStyle"
TargetType="{x:Type ListBoxItem}"
BasedOn="{StaticResource MaterialDesignListBoxItem}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}"
Color="Transparent" />
</Style.Resources>
<Style.Triggers>
<Trigger Property="IsSelected"
Value="True">
<Setter Property="Background"
Value="#316308" />
<Setter Property="Opacity"
Value="0.8" />
</Trigger>
</Style.Triggers>
</Style>
<ListBox IsSynchronizedWithCurrentItem="True"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Grid.Row="3"
ScrollViewer.CanContentScroll="False"
Style="{StaticResource MaterialDesignListBox}"
ItemsSource="{Binding Devices}"
SelectedItem="{Binding SelectedDevice, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"
ItemContainerStyle="{StaticResource SelectedHiglightStyle}">
<ListBox.ItemTemplate>
<DataTemplate>
<Border>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<Rectangle Width="35"
Height="35"
Margin="5"
HorizontalAlignment="Left"
OpacityMask="{DynamicResource DashboardDeviceLogo}">
<Rectangle.Fill>
................
<Grid Grid.Column="1">
<StackPanel>
<TextBlock Text="{lex:Loc DeviceName}"
Margin="0,4,0,2" />
<TextBlock x:Name="tbDeviceName"
Text="{Binding Device.Name}"
FontSize="10" />
................
................
................
如何更改所选项目边框的颜色?每个项目都有自己的视图模型。有没有比通过Messanger(我使用的是MVVM Light)广播消息更简单的方法,在所有
设备视图模型中捕获消息,比较设备id,然后从视图模型绑定颜色?最简单的方法在这里
如果只需要更改选择边框,可以在listboxitem的样式触发器部分中编写
<Trigger Property="IsSelected" Value="True">
<!--your code...-->
<Setter Property="BorderBrush"
Value="Red"/>
<Setter Property="BorderThickness" Value="1"/>
</Trigger>
并编辑数据模板,将边框绑定到样式中的borderbrush和borderthickness设置器
<ListBox.ItemTemplate>
<DataTemplate>
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">...
...
我已经编辑了我的答案,因为我第一次读到这个问题时,我认为每种类型的数据都需要不同的边界笔刷。但是您的案例要简单得多最简单的方法就是在这里
如果只需要更改选择边框,可以在listboxitem的样式触发器部分中编写
<Trigger Property="IsSelected" Value="True">
<!--your code...-->
<Setter Property="BorderBrush"
Value="Red"/>
<Setter Property="BorderThickness" Value="1"/>
</Trigger>
并编辑数据模板,将边框绑定到样式中的borderbrush和borderthickness设置器
<ListBox.ItemTemplate>
<DataTemplate>
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">...
...
我已经编辑了我的答案,因为我第一次读到这个问题时,我认为每种类型的数据都需要不同的边界笔刷。但是您的情况要简单得多您可以使用绑定到父ListBoxItem
容器的IsSelected
属性的数据触发器定义样式
:
<ListBox.ItemTemplate>
<DataTemplate>
<Border>
<Border.Style>
<Style TargetType="Border">
<Setter Property="BorderThickness" Value="2" />
<Setter Property="BorderBrush" Value="Black" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListBoxItem}}"
Value="True">
<Setter Property="BorderBrush" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<Grid>
...
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
...
样式
应用于项模板
中的边框
元素您可以使用绑定到父ListBoxItem
容器的IsSelected
属性的数据触发器定义样式
:
<ListBox.ItemTemplate>
<DataTemplate>
<Border>
<Border.Style>
<Style TargetType="Border">
<Setter Property="BorderThickness" Value="2" />
<Setter Property="BorderBrush" Value="Black" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListBoxItem}}"
Value="True">
<Setter Property="BorderBrush" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<Grid>
...
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
...
样式
应用于项目模板中的边框
元素
最好更改容器的背景,而不是项目本身。您已经有了带有可疑名称的ItemContainerStyle
,根据名称,它应该可以执行类似操作。最好更改容器的背景,而不是项目本身。您已经有了名为可疑的ItemContainerStyle
,根据名称,它应该可以执行类似的操作。谢谢:)工作。谢谢:)