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

有一些帖子可能指出了我的问题,但是当我尝试将他们的解决方案应用于我的任务时,我再次遇到了其他问题。


所以,我想要一个 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>


拉风的咖菲猫
浏览 108回答 1
1回答

海绵宝宝撒

您应该编写一个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>
打开App,查看更多内容
随时随地看视频慕课网APP