【发布时间】:2013-03-02 20:56:09
【问题描述】:
我需要为现有的 WPF 控件(组框、文本框、复选框等)创建一个新属性,该属性将存储其访问级别,因此我找到了附加属性。 我以这个网站http://dotnetbyexample.blogspot.com.br/2010/05/attached-dependency-properties-for.html
为例一切都很好,但是当我尝试在某些控件上使用它时出现以下错误...
错误 1 XML 命名空间“clr-namespace:ImageGUI.App_Code;assembly=ImageGUI”中不存在属性“DependencyPropertiesHoster.AcessLevel”。第 131 行位置 97.ImageGUI\MainWindow.xaml 131 97 ImageGUI
这是我的 C# 代码 sn-p...
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"
这是我对该属性的使用(错误所在...)
<GroupBox Name="gbApplications" Header="{DynamicResource applications}" CustomDepen:DependencyPropertiesHoster.AcessLevel="Client">
观察:EAcessLevel 只是一个简单的枚举器。
提前致谢。
【问题讨论】:
-
您确定
AcessLevel在程序集ImageGUI中吗?如果您删除声明中的assembly=ImageGUI部分是否有效? -
+1 对于最终在 SO 问题中包含足够信息的人。要添加到@Bob 的评论中,如果您的附加属性(或其他)与您的 XAML 位于同一程序集中,则不应在 XML->CLR 命名空间映射中包含
assembly=部分。 -
谢谢!我不敢相信它是如此简单,但我很高兴它是。只需移除末端部分即可修复它(装配=...)。但我想知道如何在代码中访问此属性?我现在如何以编程方式检索它?完美场景示例:EAcessLevel controlAcess = gbApplications.AcessLevel;
-
@Luishg,请将其发布为您自己问题的答案 - 将答案与问题分开是一个好习惯(并防止此问题再次出现在未回答的问题列表中 - 作为奖金;)。
-
谢谢,搞定了。谢谢大家的帮助和建议。
标签: c# wpf dependencies dependency-properties attached-properties