为了账号安全,请及时绑定邮箱和手机立即绑定

WPF INotifyDataErrorInfo 突出显示 ListBoxItem

WPF INotifyDataErrorInfo 突出显示 ListBoxItem

C#
炎炎设计 2022-06-19 16:45:34
我有一个ListBox这样的:<ListBox Margin="5" ItemsSource="{Binding NetworkAdapters, Mode=OneWay}" SelectedItem="{Binding SelectedNetworkAdapter}" SelectionChanged="{s:Action SelectedNetworkAdapterChanged}">    <ListBox.ItemsPanel>        <ItemsPanelTemplate>            <UniformGrid Columns="2" VerticalAlignment="Top"/>        </ItemsPanelTemplate>    </ListBox.ItemsPanel>    <ListBox.ItemTemplate>        <DataTemplate>            <StackPanel Orientation="Horizontal">                <Ellipse Width="15" Height="15" Margin="5">                    <Ellipse.Style>                        <Style TargetType="Ellipse">                            <Setter Property="Fill" Value="Gray"></Setter>                            <Style.Triggers>                                <DataTrigger Binding="{Binding Status}" Value="{x:Static wpf:NetworkAdapterStatus.Up}">                                    <Setter Property="Fill" Value="Green"></Setter>                                </DataTrigger>                                <DataTrigger Binding="{Binding Status}" Value="{x:Static wpf:NetworkAdapterStatus.Down}">                                    <Setter Property="Fill" Value="Red"></Setter>                                </DataTrigger>                            </Style.Triggers>                        </Style>                    </Ellipse.Style>                </Ellipse>使用当前的 XAML,如果任何视图模型中存在错误,则整个视图模型ListBox将突出显示为红色,但我希望只ListBoxItems突出显示包含错误的单个。我看过类似的问题,例如:WPF ListBox ErrorTemplate和 验证 ListBoxItem 而不是 ListBox但我仍然无法完成这项工作。任何帮助,将不胜感激。
查看完整描述

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

您需要实现ItemContainerStyle如下:


    <ListBox.ItemContainerStyle>

        <Style TargetType="ListBoxItem">

            <Setter Property="BorderThickness" Value="1" />

            <Setter Property="BorderBrush" Value="Transparent" />

            <Style.Triggers>

                <DataTrigger Binding="{Binding Validation.HasErrors}" Value="True">

                    <Setter Property="BorderBrush" Value="Red"/>

                </DataTrigger>

            </Style.Triggers>

        </Style>

    </ListBox.ItemContainerStyle>

这将使您能够更改ListBoxItem自身的边框,从而使整个事物随心所欲。


查看完整回答
反对 回复 2022-06-19
?
森栏

TA贡献1810条经验 获得超5个赞

您可以忘记 ErrorTemplate 并仅使用 DataTrigger 绑定到Validation.HasErrors:


  <StackPanel>

                        <StackPanel.Resources>

                            <Style TargetType="{x:Type StackPanel}" BasedOn="{StaticResource {x:Type StackPanel}}">

                                <Style.Triggers>

                                    <DataTrigger Binding="{Binding Validation.HasErrors}" Value="True"> <!-- change all text to red -->

                                        <Setter Property="Foreground" Value="Red"/>

                                    </DataTrigger>

                                </Style.Triggers>

                            </Style>

                        </StackPanel.Resources>

</StackPanel>

如果你想要一个高亮,你可以用一个 Border 包裹 StackPanel 并在一个样式中将它的颜色设置为红色。


查看完整回答
反对 回复 2022-06-19
  • 2 回答
  • 0 关注
  • 185 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信