C# C“WPF附加属性-错误:”;该属性在XML命名空间中不存在";

C# C“WPF附加属性-错误:”;该属性在XML命名空间中不存在";,c#,wpf,dependencies,dependency-properties,attached-properties,C#,Wpf,Dependencies,Dependency Properties,Attached Properties,我需要为现有WPF控件(Groupbox、textbox、checkbox等)创建一个新属性,该属性将存储其访问级别,因此我找到了附加的属性。 我用这个网站作为例子 一切都很好,但当我尝试在某些控件上使用它时,出现了以下错误 错误1 XML命名空间clr命名空间:ImageGUI.App_代码中不存在属性“DependencyPropertiesHoster.AcessLevel”;assembly=ImageGUI'。第131行位置97。ImageGUI\MainWindow.xaml 131

我需要为现有WPF控件(Groupbox、textbox、checkbox等)创建一个新属性,该属性将存储其访问级别,因此我找到了附加的属性。 我用这个网站作为例子

一切都很好,但当我尝试在某些控件上使用它时,出现了以下错误

错误1 XML命名空间clr命名空间:ImageGUI.App_代码中不存在属性“DependencyPropertiesHoster.AcessLevel”;assembly=ImageGUI'。第131行位置97。ImageGUI\MainWindow.xaml 131 97 ImageGUI

这是我的C#代码片段

namespace ImageGUI.App_Code
{    
    public static class DependencyPropertiesHoster
    {
        //[AttachedPropertyBrowsableForChildren]
        public static readonly DependencyProperty AcessLevelProperty =
            DependencyProperty.RegisterAttached(
                "AcessLevel",
                typeof(EAcessLevel),
                typeof(DependencyPropertiesHoster),
                new PropertyMetadata(AcessLevelChanged)
            );

        // Called when Property is retrieved
        public static EAcessLevel GetAcessLevel(DependencyObject obj)
        {
            if (obj != null)
                return (EAcessLevel)obj.GetValue(AcessLevelProperty);
            else
                return EAcessLevel.Client;
                //return obj.GetValue(AcessLevelProperty) as EAcessLevel;            
        }

        // Called when Property is set
        public static void SetAcessLevel(DependencyObject obj, EAcessLevel value)
        {
            obj.SetValue(AcessLevelProperty, value);
        }

        // Called when property is changed
        private static void AcessLevelChanged(object sender, DependencyPropertyChangedEventArgs args)
        {
            var attachedObject = sender as UIElement;
            if (attachedObject != null)
            {
                // do whatever is necessary, for example
                // attachedObject.CallSomeMethod(                 
                // args.NewValue as TargetPropertyType);
            }
        }
    }
}
这是我在窗口的声明

xmlns:CustomDepen="clr-namespace:ImageGUI.App_Code;assembly=ImageGUI"
下面是我对该属性的使用(错误所在…)


观察:EAcessLevel只是一个简单的枚举器


提前谢谢。

谢谢鲍勃和肯特的回答,这基本上解决了问题。 在这种情况下,只需更改

xmlns:CustomDepen="clr-namespace:ImageGUI.App_Code;assembly=ImageGUI"

解决了这个问题。 其他一切都是正确的

关于我关于如何检索指定值的其他评论,如下所示:

EAcessLevel currentAcess = (EAcessLevel)gbApplications.GetValue(DependencyPropertiesHoster.AcessLevelProperty);

谢谢,希望这对将来的人也有帮助。

您确定
AcessLevel
在程序集中
ImageGUI
?如果您删除声明中的
assembly=ImageGUI
部分,它是否有效?+1用于最终在SO问题中包含足够信息的人。要添加到@Bob的注释中,如果附加的属性(或任何内容)与XAML位于同一程序集中,则不应包含XML->CLR命名空间映射的
assembly=
部分。谢谢!我不敢相信事情会这么简单,但我很高兴事情会这么简单。只需移除末端零件就可以修复它(assembly=…)。但我想知道如何在代码中访问此属性?我现在如何通过编程检索它?完美场景示例:EAcessLevel controlAcess=gbApplications.AcessLevel@Luishg,请将其作为您自己问题的答案发布-将答案与问题分开是一种很好的做法(并防止此问题再次出现在未回答问题列表中-作为奖励;)。谢谢,完成了。谢谢你们的帮助和建议。
xmlns:CustomDepen="clr-namespace:ImageGUI.App_Code"
EAcessLevel currentAcess = (EAcessLevel)gbApplications.GetValue(DependencyPropertiesHoster.AcessLevelProperty);