Je me demande comment puis-je lier MenuItem.Header à la propriété de dépendance parent/UserControl parent? Voici un exemple simple:Comment lier MenuItem.Header à la propriété de dépendance Window/UserControl?
Window1.xaml:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" x:Name="self">
<Grid>
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Header="{Binding Path=MenuText, ElementName=self}" />
</ContextMenu>
</Grid.ContextMenu>
<TextBlock Text="{Binding Path=MenuText, ElementName=self}"/>
</Grid>
</Window>
Window1.xaml.cs:
public partial class Window1 : Window {
public static readonly DependencyProperty MenuTextProperty = DependencyProperty.Register(
"MenuText", typeof (string), typeof (Window1), new PropertyMetadata("Item 1"));
public Window1()
{
InitializeComponent();
}
public string MenuText {
get { return (string)this.GetValue(MenuTextProperty); }
set { this.SetValue(MenuTextProperty, value); }
}
}
Dans mon cas, affiche TextBlock "de l'article 1", et le menu contextuel affiche l'élément vide. Qu'est-ce que je fais mal? Il me semble que j'ai dû faire face à de sérieux malentendus sur les principes de la liaison de données WPF.
Pourriez-vous s'il vous plaît clarifier comment passer la référence à la fenêtre/UserControl à travers le Tag? Si j'utilise la syntaxe Tag = "{x: Reference self}", j'obtiens une erreur de compilation ** "La balise 'Reference' n'existe pas dans l'espace de noms XML 'http://schemas.microsoft.com/winfx/2006/xaml' . ** J'utilise VS2008 et .NET framework 3.5 –
Existe seulement dans .NET 4, vous devriez pouvoir utiliser une liaison à la place, quelque chose comme 'Tag =" {Binding ElementName = self} "' –
Clear.Thanks beaucoup –