С# WPF Attached Properties - Ошибка: "Свойство не существует в пространстве имен XML"
Мне нужно создать новое свойство для существующих элементов управления WPF (Groupbox, текстовое поле, флажок и т.д.), который будет хранить его уровень acess, поэтому я обнаружил Attached Properties.
Я использовал в качестве примера этот сайт http://dotnetbyexample.blogspot.com.br/2010/05/attached-dependency-properties-for.html
Все было хорошо, но затем я получил следующую ошибку при попытке использовать ее на каком-то элементе управления...
Ошибка 1 Свойство "DependencyPropertiesHoster.AcessLevel" не существует в пространстве имен XML "пространство имен clr: ImageGUI.App_Code; assembly = ImageGUI". Строка 131 Позиция 97. ImageGUI\MainWindow.xaml 131 97 ImageGUI
Это мой фрагмент кода С#...
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 - просто простой перечислитель.
Спасибо заранее.
Ответы
Ответ 1
Спасибо Бобу и Кенту за ответы, которые в значительной степени решили проблему.
В этом случае просто измените
xmlns:CustomDepen="clr-namespace:ImageGUI.App_Code;assembly=ImageGUI"
к
xmlns:CustomDepen="clr-namespace:ImageGUI.App_Code"
зафиксировал ситуацию.
Все остальное было правильным.
Что касается моего другого комментария о том, как получить указанное значение, это будет выглядеть так:
EAcessLevel currentAcess = (EAcessLevel)gbApplications.GetValue(DependencyPropertiesHoster.AcessLevelProperty);
Спасибо, и надеюсь, что это также поможет кому-то в будущем.