gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 10:28:50 28 4
gpt4 key购买 nike

我有一个 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:

<Page
x:Class="UWPSystemTypeConverterTest.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:converter="using:UWPSystemTypeConverterTest.Converter"
xmlns:enums="using:UWPSystemTypeConverterTest.Enum"
mc:Ignorable="d">

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

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<TextBlock Text="{Binding Converter={StaticResource Converter}}" />
</Grid>
</Page>

当我运行应用程序时,出现以下错误:

Windows.UI.Xaml.Markup.XamlParseException: 'The text associated with this error code could not be found.

Failed to create a 'UWPSystemTypeConverterTest.Converter.EnumTypeConverter' from the text 'enums:CustomEnum'. [Line: 14 Position: 56]'

如果我将 CustomEnum 类型的属性添加到从未使用过的代码隐藏文件,则应用程序可以运行。

更改后的代码- 文件:

public sealed partial class MainPage : Page
{
public CustomEnum WithThisPropertyTheAppWorks { get; set; }

public MainPage()
{
InitializeComponent();
this.DataContext = this;
}
}

复制的完整项目在这里:https://github.com/SabotageAndi/UWPSystemTypeConverterTest

要取消注释的行是 https://github.com/SabotageAndi/UWPSystemTypeConverterTest/blob/master/UWPSystemTypeConverterTest/MainPage.xaml.cs#L13

我怀疑 UWP 的优化器导致了这个问题。真的是这样吗?如果代码隐藏文件中没有未使用的属性,我该如何修复错误?

最佳答案

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

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

关于xaml - System.Type 作为转换器的属性 - 仅适用于代码隐藏中未使用的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44932338/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com