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

ComboBox:根据属性状态设置内容样式

ComboBox:根据属性状态设置内容样式

C#
拉风的咖菲猫 2023-08-20 09:58:21
有一些帖子可能指出了我的问题,但是当我尝试将他们的解决方案应用于我的任务时,我再次遇到了其他问题。所以,我想要一个 ComboBox 显示我的 Path 类中的数字(PathID)。Path有一个属性叫PathState,它是一个枚举,可以是PathState.red、PathState.blue、PathState.green,表示一种颜色。我想创建一个简单的路径类型硬编码列表,仅供学习之用,然后填充组合框。我想创建三个 ID 不断增加的 Path 对象,通过分配 PathState 属性为每个对象赋予不同的颜色。启动应用程序后,组合框应包含数字 1、2 和 3,其中 1 是红色,2 是绿色,3 是蓝色。我知道我需要通过 ComboBox.ItemTemplate、DataTemplate 和 DataTrigger 来访问它 - 我只是不知道从哪里开始。public class Path{  public int PathID {get;set;}  public PathState PathState { get; set;}}public enum PathState{   red = 0,   green = 1,   blue = 2}编辑:好的,我已经做了一些努力,但被困在 DataTrigger-Part 上:这是我的代码:<ComboBox Name="cmbTest" ItemsSource="{Binding MyPaths}" Grid.Column="1" Grid.Row="1"  VerticalContentAlignment="Center" HorizontalContentAlignment="Center">        <ComboBox.ItemTemplate>            <DataTemplate>                <TextBlock x:Name="cmbText"  Text="{Binding PathId}" Foreground="Red"/>            </DataTemplate>                        </ComboBox.ItemTemplate>        <Style>            <Style.Triggers>                <DataTrigger Binding="{Binding Path=MyPaths}" Value="MyPaths.PathState">                     <!-- Actually, I don't know how to continue beyond this point) -->                </DataTrigger>            </Style.Triggers>        </Style>    </ComboBox>
查看完整描述

1 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

您应该编写一个IValueConverter从您的转换PathState为相应的System.Windows.Media.Brush. 使用预定义的Brushes,除非您需要特殊的东西。

然后在资源中的某个位置实例化值转换器(可以在任何父级别,我仅将其放入ComboBox本示例中。然后使用转换器将颜色绑定到显示属性。

如果你想要Background,就在 之内做ItemContainerStyle。如果你想把Foreground它放在需要的地方。注意:我的示例设置了 Foreground=Background,你不会看到太多。

<ComboBox>

    <ComboBox.Resources>

        <local:MyColorConverter x:Key="colorConverter"/>

    </ComboBox.Resources>

    <ComboBox.ItemTemplate>

        <DataTemplate>

            <TextBlock Text="{Binding PathID}" Foreground="{Binding PathState,Converter={StaticResource colorConverter}}"/>

        </DataTemplate>

    </ComboBox.ItemTemplate>

    <ComboBox.ItemContainerStyle>

        <Style TargetType="ComboBoxItem">

            <Setter Property="Background" Value="{Binding PathState,Converter={StaticResource colorConverter}}"/>

        </Style>

    </ComboBox.ItemContainerStyle>

</ComboBox>


查看完整回答
反对 回复 2023-08-20
  • 1 回答
  • 0 关注
  • 107 浏览

添加回答

举报

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