Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF XAML列表框所选项目边框颜色_C#_Wpf_Xaml_Listbox_Mvvm Light - Fatal编程技术网

C# WPF XAML列表框所选项目边框颜色

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

我已经实现了一些listbox,其中包含边框和该边框中的网格

<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
,根据名称,它应该可以执行类似的操作。谢谢:)工作。谢谢:)