You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF自定义MyDouble结构体作为XAML资源如何支持直接内容

解决方案

你只需要给MyDouble结构体添加ContentPropertyAttribute特性,指定直接内容映射到Value属性即可,XAML解析器原生支持字符串到double类型的自动转换,不需要额外修改其他代码。

修改后的代码

首先引入对应命名空间:

using System.Windows.Markup;

修改结构体定义:

[ContentProperty(nameof(Value))]
public struct MyDouble
{
   public static implicit operator MyDouble(double d)
   {
      return new MyDouble{Value=d};
   }
   public static implicit operator double(MyDouble d)
   {
      return d.Value;
   }

   public double Value {get;set;}
}

原理解释

  • XAML 抛出The type 'MyDouble' does not support direct content报错的核心原因是,XAML解析器不知道自定义类型的内部直接内容要绑定到哪个属性上。ContentPropertyAttribute就是用来显式声明类型的默认内容属性,指定后标签内部的内容会自动赋值给对应的属性。
  • 因为你声明的内容属性Value是系统原生的double类型,XAML解析器内置了字符串到double的转换逻辑,所以不需要额外实现类型转换器。如果后续你需要直接内容赋值给自定义类型的属性,才需要搭配TypeConverterAttribute实现自定义类型转换。
  • 你查询到的系统Double实现的若干接口,和XAML直接内容支持没有关联,不需要额外实现。

内容的提问来源于stack exchange,提问作者3xGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 14:15:03