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

实现绑定TemplateBinding的DependencyProperty时出现XDG0008错误如何解决

这个错误由多个常见的XAML和附加属性编写问题共同导致,具体原因和修复方案如下:

错误原因汇总

  • 附加属性注册方法使用错误:你当前用DependencyProperty.Register注册的是普通依赖属性,要作用于其他控件的附加属性必须用DependencyProperty.RegisterAttached方法注册。
  • 依赖属性所有者类型填写错误:注册方法的第三个参数是该属性的所有者类,应该填定义属性的typeof(ExtensionsClass),而非typeof(Button),这会直接导致XAML找不到对应类的属性定义。
  • 拼写不一致:报错提示找不到ExtensionClass,但你实际定义的类名为ExtensionsClass(多了s);如果有地方将命名空间写为小写extensions,和定义的首字母大写的Extensions不匹配,也会触发命名空间找不到的错误。
  • TemplateBinding绑定附加属性语法错误:绑定附加属性时需要用括号包裹完整的属性路径,否则XAML会将其识别为普通控件属性,无法正确关联到扩展类的附加属性。

修复后的代码

C#代码修正

namespace Extensions {
    public class ExtensionsClass {
        // 改用RegisterAttached注册附加属性,所有者类型改为当前类
        public static readonly DependencyProperty MouseOverBackgroundProperty = 
            DependencyProperty.RegisterAttached(
                "MouseOverBackground", 
                typeof(Brush), 
                typeof(ExtensionsClass),
                new PropertyMetadata(null));

        public static void SetMouseOverBackground(UIElement element, Brush value) {
            element.SetValue(MouseOverBackgroundProperty, value);
        }

        public static Brush GetMouseOverBackground(UIElement element) {
            return (Brush)element.GetValue(MouseOverBackgroundProperty);
        }
    }
}

XAML代码修正

<ResourceDictionary xmlns:ext="clr-namespace:Extensions"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero2"
                    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <ControlTemplate x:Key="ButtonBaseControlTemplate1" TargetType="{x:Type ButtonBase}">
        <!-- 补上原代码缺失的border元素避免运行时报错 -->
        <Border x:Name="border" Background="{TemplateBinding Background}">
            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <!-- 附加属性用括号包裹,修正绑定语法 -->
                <Setter Property="Background" TargetName="border" Value="{TemplateBinding Property=(ext:ExtensionsClass.MouseOverBackground)}"/>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>
</ResourceDictionary>

额外注意事项

  • 如果ExtensionsClass定义在单独的类库项目中,XAML的命名空间需要加上程序集声明,格式为clr-namespace:Extensions;assembly=你的类库程序集名称
  • 修复后如果仍有设计时报错,尝试清理解决方案、重新生成项目后重启Visual Studio即可消除设计时缓存导致的误报。

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

相关产品推荐
方舟 Agent Plan

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

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