UWP将C#中的ComboBox子控件用于枚举 - 显示

时间:2016-09-02 15:42:24

标签: combobox uwp enumeration

我已经在C#,UWP中为枚举类型属性开发了一个子类化的ComboBox控件。

效果很好!几乎所有的时间(...类型)。

当枚举类型为Windows.UI.Text.FontStyle时出现问题。

项目选择仍然正常,但它显示的不是.ToString()值,而是每个项目的 Windows.Foundation.IReference`1< Windows.UI.Text.FontStyle>

当我调试时,就我的代码而言,一切都是一样的。

我的控件由名为SelectedItemEnum的DependencyProperty工作 - SelectedItemEnumProperty,其中' type是对象。 通过这个绑定的具体枚举值,它设置ItemsSource:

ItemsSource = Enum.GetValues(SelectedItemEnum.GetType()).Cast<Enum>().ToList();

(我处理SelectionChanged事件(在控件内部)来设置值,但该部分始终运行良好。)

1 个答案:

答案 0 :(得分:1)

我现在已经尝试了一个小时左右,但我无法弄清楚为什么会发生这种情况,我肯定会有兴趣看到这背后的真正原因......显然有一些关于{{1}的事情。枚举,导致它被表示为可为空(FontStyle在.NET世界中似乎是"equivalent" to nullable

然而,要解决您的问题,您可以构建一个自定义ValueConverter,它会在显示之前将值转换为字符串。

首先创建一个IReference

ToStringConverter

现在添加为您的网页或应用程序本身的资源:

public class ToStringConverter : IValueConverter
{
    public object Convert( object value, Type targetType, object parameter, string language )
    {
        var stringValue = value.ToString();
        return stringValue;
    }

    public object ConvertBack( object value, Type targetType, object parameter, string language )
    {
        throw new NotImplementedException();
    }
}

然后您可以将它与组合框一起使用,如下所示:

<Page.Resources>
    <local:ToStringConverter x:Key="ToStringConverter" />
</Page.Resources>

这将正确显示枚举的值。你可以在here on my GitHub中看到它并试用它,以及我用来试图解决这个问题的示例应用程序。

我会继续尝试找到原因,因为它真的让我感兴趣:-)。