【问题标题】:WPF Binding using a default value使用默认值的 WPF 绑定
【发布时间】:2018-11-25 02:37:34
【问题描述】:

我正在使用Binding 定义三种不同的颜色来填充ellipse

为此,我在绑定中使用了包含Enumconverter

根据返回的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


【解决方案1】:

XAML

<Ellipse Fill="{Binding MyColor}"></Ellipse>

型号

private string _myColor = "Red";

public string MyColor
{
    get { return _myColor; }
    set
    {
        _myColor = value;
        OnPropertyChanged("");
    }
}

【讨论】:

    【解决方案2】:

    您的转换器应返回Restrictive,以便将EllipseFill 属性设置为Red。这将触发您的最后一个DataTrigger

    <DataTrigger Binding="{Binding SignalStatus, Converter={StaticResource IntToSignalStatus} }" Value="Restrictive">
        <Setter Property="Fill" Value="Red"/>
    </DataTrigger>
    

    仅当转换器既不返回 UnknownPermissive 也不返回 Restrictive 时,才会应用您的默认(未注释)设置器。

    【讨论】:

      猜你喜欢
      • 2011-01-15
      • 2010-11-08
      • 2011-07-22
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多