有些帖子可能指出了我的问题,但是当我尝试将其解决方案应用于任务时,我又被其他问题所困扰。

因此,我希望ComboBox显示我的Path类中的数字(PathID)。 Path具有一个称为PathState的属性,该属性是一个枚举,可以是PathState.red,PathState.blue,PathState.green(表示颜色)。

我想创建一个简单的Path类型的硬编码列表,仅用于学习,然后填充ComboBox。我想创建三个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>

最佳答案

您应该编写一个IValueConverter,该PathState将从您的System.Windows.Media.Brush转换为相应的Brushes。除非您有特殊要求,否则请使用预定义的ComboBoxhttps://docs.microsoft.com/de-de/dotnet/api/system.windows.media.brushes?view=netframework-4.8)。

然后在资源中的某个地方实例化值转换器(可以在任何父级,在此示例中,我仅将其放在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>

10-04 11:30