Lui*_*shg 16 c# wpf dependencies dependency-properties attached-properties
我需要为现有的WPF控件(Groupbox,文本框,复选框等)创建一个新属性,这个控件将存储其访问级别,因此我找到了附加属性.我以此网站为例http://dotnetbyexample.blogspot.com.br/2010/05/attached-dependency-properties-for.html
一切都很好,但是当我尝试在某些控件上使用它时,我得到了以下错误...
错误1 XML命名空间'clr-namespace中不存在属性'DependencyPropertiesHoster.AcessLevel':ImageGUI.App_Code; 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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
这是我在Window的声明
xmlns:CustomDepen="clr-namespace:ImageGUI.App_Code;assembly=ImageGUI"
Run Code Online (Sandbox Code Playgroud)
这是我对该属性的使用(错误所在......)
<GroupBox Name="gbApplications" Header="{DynamicResource applications}" CustomDepen:DependencyPropertiesHoster.AcessLevel="Client">
Run Code Online (Sandbox Code Playgroud)
观察:EAcessLevel只是一个简单的枚举器.
提前致谢.
Lui*_*shg 15
感谢鲍勃和肯特的答案,这几乎解决了这个问题.在这种情况下,只是改变
xmlns:CustomDepen="clr-namespace:ImageGUI.App_Code;assembly=ImageGUI"
Run Code Online (Sandbox Code Playgroud)
至
xmlns:CustomDepen="clr-namespace:ImageGUI.App_Code"
Run Code Online (Sandbox Code Playgroud)
解决了这个问题.其他一切都是正确的.
关于我关于如何检索指定值的其他评论,它将是这样的:
EAcessLevel currentAcess = (EAcessLevel)gbApplications.GetValue(DependencyPropertiesHoster.AcessLevelProperty);
Run Code Online (Sandbox Code Playgroud)
谢谢,并希望它也能帮助将来的某些人.