Devo creare una nuova proprietà per i controlli WPF esistenti (casella di gruppo, casella di testo, casella di controllo, ecc.), Che memorizzerà il suo livello di accesso, quindi Ho scoperto Proprietà allegate. ho usato come esempio questo sito http://dotnetbyexample.blogspot.com.br/2010/05/attached-dependency-properties-for.htmlProprietà associate al C# WPF - Errore: "La proprietà non esiste nello spazio dei nomi XML"
Tutto è andato bene, ma poi ho ottenuto il seguente errore quando si tenta di utilizzarlo su un certo controllo ...
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
Questo è il mio C# frammento di codice ...
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);
}
}
}
}
Qui è la mia dichiarazione alla finestra
xmlns:CustomDepen="clr-namespace:ImageGUI.App_Code;assembly=ImageGUI"
e qui è il mio utilizzo della proprietà (in cui l'errore si trova ...)
<GroupBox Name="gbApplications" Header="{DynamicResource applications}" CustomDepen:DependencyPropertiesHoster.AcessLevel="Client">
Osservazione: EAcessLevel è solo una semplice enumerazione.
Grazie in anticipo.
Sei sicuro che 'AcessLevel' è nell'assembly' ImageGUI'? Funziona se rimuovi la parte 'assembly = ImageGUI' della tua dichiarazione? –
+1 per qualcuno che finalmente include informazioni sufficienti in una domanda SO. Per aggiungere al commento di @ Bob, se la tua proprietà allegata (o qualsiasi altra cosa) è nello stesso assembly di XAML, non dovresti includere la parte 'assembly =' del tuo mapping di spazio dei nomi CLR XML->. –
Grazie! Non posso credere che fosse così semplice, ma sono contento che lo sia stato. Solo la rimozione della parte finale lo ha risolto (assembly = ...). Ma mi chiedo come accedo questa proprietà nel codice? Come lo recupererei in modo programmatico ora? esempio di scenario perfetto: EAcessLevel controlAcess = gbApplications.AcessLevel; – Luishg