Xaml System.Type作为转换器的属性-仅适用于代码隐藏中未使用的属性

Xaml System.Type作为转换器的属性-仅适用于代码隐藏中未使用的属性,xaml,uwp,uwp-xaml,Xaml,Uwp,Uwp Xaml,我有一个IValueConverter,它具有在XAML中设置的System.Type属性 转换器: internal class EnumTypeConverter : IValueConverter { public Type TypeToDisplay { get; set; } public object Convert(object value, Type targetType, object parameter, string language) {

我有一个IValueConverter,它具有在XAML中设置的System.Type属性

转换器:

internal class EnumTypeConverter : IValueConverter
{
    public Type TypeToDisplay { get; set; }

    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return TypeToDisplay?.FullName;
    }

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

复制的完整项目如下:

取消注释的行是

我怀疑是UWP的乐观主义者造成了这个问题。 真的是这样吗?
如果代码隐藏文件中没有未使用的属性,如何修复错误?

MVP邮件列表中MSFT员工的信息:

这种行为是UWP的当前限制

XAML编译器和运行时不支持System.Type类型的属性。因此,不会生成所需的元数据,并且运行时无法将字符串转换为类型


但是由于代码背后的公共属性,编译器现在生成所需的元数据。我对这一解决方案不太满意,但它比其他解决方案(例如,类型为全名的字符串属性)要好。

针对UWP Build 10240,一个可行的解决方案是在实例化转换器之前,在页面的静态资源中添加目标枚举的虚拟实例

 <Page.Resources>
    <enums:CustomEnum x:Key="WorkAround">CustomEnumValue</enums:CustomEnum>
    <converter:EnumTypeConverter x:Key="Converter" TypeToDisplay="enums:CustomEnum" />
</Page.Resources>

自定义枚举值

我已经运行了您的示例代码并确认了您的发现!不幸的是,这听起来很像UWP平台上的一个bug……您只是想在TextBlock中显示枚举的全名吗?如果是,请尝试@AVK:No,这只是该问题的一个小回购。我们正在通过转换器为列表框生成ItemsSource。我们知道我们可以使用不同的工作方式来达到需求,但是我们想知道,这里有什么问题,以防将来出现问题。你会考虑<代码> X:绑定< /代码>吗?这听起来像是一个bug。我认为最简单的解决方法是在
App.xaml
中定义所有枚举。就像
Value1
一样,至少您不需要将属性分布在不同的页面上。你也可以尝试向MSFT报告。
public sealed partial class MainPage : Page
{
        public CustomEnum WithThisPropertyTheAppWorks { get; set; }

        public MainPage()
        {
            InitializeComponent();
            this.DataContext = this;
        }
}
 <Page.Resources>
    <enums:CustomEnum x:Key="WorkAround">CustomEnumValue</enums:CustomEnum>
    <converter:EnumTypeConverter x:Key="Converter" TypeToDisplay="enums:CustomEnum" />
</Page.Resources>