WPF XAML设计器StaticResourceExtension类型转换报错排查
WPF XAML设计器抛出XDG0062类型转换错误问题
我最初通过如下代码设置应用全局边距:
<Thickness x:Key="DefaultMargin">3</Thickness>
后续需要复用该数值设置圆角半径、边框等其他参数,因此定义了全局数值资源:
<sys:Double x:Key="Spacing">3</sys:Double>
该资源可正常使用,但当我用其设置DefaultMargin的属性时:
<Thickness x:Key="DefaultMargin" Left="{StaticResource ResourceKey=Spacing}" />
代码可正常编译运行,但当应用停止运行、IntelliSense重新加载XAML文件时,会抛出错误:XDG0062 Object of type 'System.Windows.StaticResourceExtension' cannot be converted to type 'System.Double'.
执行项目生成操作后错误会消失。我检索了多个技术站点暂未找到解决方案,目前暂时改回硬编码常量,希望实现参数单一定义、全局统一修改,寻求可行解决方案。
更新1
为补充问题上下文,附上App.xaml报错截图(另一独立文件中存在同类报错,疑似为系统性问题):
在不提供完整源码的情况下无法补充更多上下文信息。
更新2
我将App.xaml及相关依赖迁入全新解决方案后排查发现,问题诱因是我自定义的一个值转换器,代码如下:
namespace Program.View.Converters { [ValueConversion(typeof(string), typeof(string))] internal class RatioConverter : MarkupExtension, IValueConverter { private static RatioConverter _instance; public RatioConverter() { } public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { double size = System.Convert.ToDouble(value) * System.Convert.ToDouble(parameter, CultureInfo.InvariantCulture); return size.ToString("G0", CultureInfo.InvariantCulture); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } public override object ProvideValue(IServiceProvider serviceProvider) { return _instance ?? (_instance = new RatioConverter()); } } }
该转换器在多处被引用,其中在App.xaml中的引用位置如下:
... xmlns:con="clr-namespace:Program.View.Converters" ... <Style x:Key="DefaultWindow" TargetType="{x:Type Window}"> <Setter Property="Width" Value="800" /> <Setter Property="Height" Value="200" /> <Setter Property="ResizeMode" Value="NoResize" /> <Setter Property="SizeToContent" Value="Height" /> <Setter Property="MaxHeight" Value="{Binding Source={x:Static SystemParameters.PrimaryScreenHeight}, Converter={con:RatioConverter}, ConverterParameter='0.9' }" /> </Style>
我暂未明确转换器的具体问题点,推测是throw new NotImplementedException();语句触发了设计器异常。迁入全新解决方案后问题已消失,目前无法稳定复现该故障。
内容的提问来源于stack exchange,提问作者UndeadBob
相关产品推荐
相关产品推荐

