Potrzebuję utworzyć nową właściwość do istniejących formantów WPF (Groupbox, pole tekstowe, pole wyboru itp.), Która będzie przechowywać swój poziom dostępu, dlatego Odkryłem załączone właściwości. użyłem jako przykład ta strona http://dotnetbyexample.blogspot.com.br/2010/05/attached-dependency-properties-for.htmlC# WPF Załączone właściwości - Błąd: "Właściwość nie istnieje w obszarze nazw XML"
Wszystko było w porządku, ale potem mam następujący błąd podczas próby użycia go na pewną kontrolę ...
Error 1 The property 'DependencyPropertiesHoster.AcessLevel' does not exist in XML namespace 'clr-namespace:ImageGUI.App_Code;assembly=ImageGUI'. Line 131 Position 97. ImageGUI\MainWindow.xaml 131 97 ImageGUI
To jest mój kod C# urywek ...
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);
}
}
}
}
Oto moja deklaracja w oknie
xmlns:CustomDepen="clr-namespace:ImageGUI.App_Code;assembly=ImageGUI"
I tu jest moje korzystanie z nieruchomości (gdzie leży błąd ...)
<GroupBox Name="gbApplications" Header="{DynamicResource applications}" CustomDepen:DependencyPropertiesHoster.AcessLevel="Client">
Obserwacja: EAcessLevel jest tylko prosty wyliczający.
Z góry dziękuję.
Czy jesteś pewien, że 'AcessLevel' jest w zespole' ImageGUI'? Czy to działa, jeśli usuniesz część deklaracji "assembly = ImageGUI"? –
+1 dla kogoś, kto w końcu zawiera wystarczające informacje w pytaniu dotyczącym SO. Aby dodać komentarz @ Bob, jeśli twoja dołączona właściwość (lub cokolwiek innego) jest w tym samym zespole co Twój XAML, nie powinieneś uwzględniać części 'assembly =' w mapowaniu obszaru nazw XML-> CLR. –
Dziękujemy! Nie mogę uwierzyć, że to było takie proste, ale cieszę się, że tak było. Usunięcie części końcowej spowodowało naprawienie (montaż = ...). Ale zastanawiam się, jak mogę uzyskać tę właściwość w kodzie? Jak mogę teraz pobrać programowo? przykład scenariusza doskonałego: EAcessLevel controlAcess = gbApplications.AcessLevel; – Luishg