【发布时间】:2018-11-25 02:37:34
【问题描述】:
我正在使用Binding 定义三种不同的颜色来填充ellipse
为此,我在绑定中使用了包含Enum 的converter
根据返回的enum,改变填充颜色
我的一些 XAML:
<Ellipse Name="SignalStatus" Height="16" Width="16" Margin="29,35,14.2,68.2">
<Ellipse.Style>
<Style TargetType="Ellipse">
<!--<Setter Property="Fill" Value="Red"/> -->
<Style.Triggers>
<!--SignalStatus "Unknown" -->
<DataTrigger Binding="{Binding SignalStatus, Converter={StaticResource IntToSignalStatus} }" Value="Unknown">
<Setter Property="Fill" Value="Magenta"/>
</DataTrigger>
<!--SignalStatus "Permissive" -->
<DataTrigger Binding="{Binding SignalStatus, Converter={StaticResource IntToSignalStatus} }" Value="Permissive">
<Setter Property="Fill" Value="Green"/>
</DataTrigger>
<!--SignalStatus "Restrictive" -->
<DataTrigger Binding="{Binding SignalStatus, Converter={StaticResource IntToSignalStatus} }" Value="Restrictive">
<Setter Property="Fill" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Ellipse.Style>
</Ellipse>
转换器:
public class IntToSignalStatus : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return SignalStatus.Unknown;
switch (value.ToString())
{
case "0":
return SignalStatus.Restrictive;
case "1":
return SignalStatus.Permissive;
default:
break;
}
return PlatformSkip.Unknown;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
在规范文档中,他们希望在控件上默认设置Red color。
如何为我的ellipse 定义默认填充颜色(红色)?
PS:我是 WPF 和 C# 编程的初学者
【问题讨论】:
-
取消注释设置器?但是如果枚举只包含 Unknown、Pemissive 和 Restrictive 选项,则只有在绑定由于某种原因失败时才会应用默认值。
-
我评论了 setter,因为我不确定它是否正确。我认为这是设置默认值的方法。但是当我运行时,默认显示的项目颜色是绿色,对应于转换器中的
Permissive状态 -
如果 SignalStatus 返回 Restrictive,这是预期的行为。您希望何时显示“默认”颜色? DataTriggers 覆盖默认设置器。
-
我希望控件在我的应用程序午餐时显示红色(默认)。
-
它应该除非 SignalStatus 属性返回 Permissive 或 Unknown。那么它应该分别是绿色或洋红色。这就是您在 XAML 中实现的行为。换句话说,如果 SignalStatus 属性设置为 Permissive 或 Unknown,则颜色永远不会是 Red。
标签: c# wpf xaml data-binding binding