【发布时间】:2019-12-16 06:44:39
【问题描述】:
有些帖子可能指向我的问题,但是当我尝试将他们的解决方案应用于我的任务时,我又被其他问题困住了。
所以,我想要一个 ComboBox 来显示我的 Path 类中的一个数字 (PathID)。 Path有一个叫PathState的属性,它是一个枚举,可以是PathState.red、PathState.blue、PathState.green,表示一种颜色。
我想创建一个简单的 Path 类型硬编码列表,仅用于学习,然后填充 ComboBox。我想创建三个 ID 递增的 Path 对象,通过分配 PathState 属性为每个对象赋予不同的颜色。
通过启动应用程序,ComboBox 应包含数字 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>
【问题讨论】:
-
首先创建一个包含
DataTemplate的ItemTemplate。然后在您的数据模板中定义DataTriggers。您阅读了哪些特定的问题和答案,还有哪些不清楚的地方? -
作为初学者,我很难说得更具体——我想我漏掉了一些术语。请看我的编辑;特别是 DataTrigger-segment - 那里找不到我的 TargetName。我希望这将是解释性的。
-
@SelfBiased_Resistor 您能否更具体地说明您想要设置的样式(组合框中的项目,组合框取决于所选项目,其他取决于所选项目,...) ?样式是否取决于组合框是打开还是关闭?您希望选择颜色的行为如何?它是相关的还是你只关心没有重点的项目的颜色?
-
@grek40:实际上我想根据 PathState-property 的状态为 ComboBox-Items 着色(如果设置为红色,则显示项目的颜色应为红色,如果设置为绿色,项目的颜色应该是绿色,等等)。因此,如果您单击组合框并打开它,您应该通过它的颜色来显示项目状态(稍后颜色将代表信息,例如,红色项目代表打开的任务,绿色项目代表已完成的任务等等),
标签: c# wpf combobox datatrigger