2010-11-25 6 views
0

Je suis en train d'avoir une fenêtre avec un élément <Menu> dans ce lié à un DependencyProperty:élément de contenu lié à la propriété

Voici mon Xaml:

<Window x:Class="attachement.xWindow" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Menu/> 
     <ToolBarTray x:Name="ToolBarTray" Grid.Row="1"> 
     </ToolBarTray> 
     <ScrollViewer Grid.Row="2"> 

     </ScrollViewer> 
    </Grid> 
</Window> 

et mon code ici derrière:

public partial class xWindow : Window 
{ 

    public Menu Menu 
    { 
     get { return (Menu)GetValue(MenuProperty); } 
     set { SetValue(MenuProperty, value); } 
    } 
    public static readonly DependencyProperty MenuProperty = DependencyProperty.Register("Menu", typeof(Menu), typeof(xWindow), new UIPropertyMetadata(0)); 

    public xWindow() 
    { 
     InitializeComponent(); 
    } 
} 

maintenant ma question est la suivante: comment puis-je lier l'élément <Menu> dans mon XAML à la propriété de dépendance dans le code derrière de sorte que lorsque je fais « myXwindow.Menu = new Menu() {.. .}; " le menu est mis à jour dans la fenêtre?

grâce

NB: Je tenté de mettre le XAML comme ceci: <Menu x:Name="Menu"> et enlever le dp en C# si taht je pouvais accéder directement au menu défini en XAML, Wich semble fonctionner (pas d'accumulation ou erreur d'exécution) mais ne me permet pas de le mettre à nouveau après la fenêtre a été affichée

Répondre

1

Vous pouvez envelopper votre Menu dans un autre contrôle

<ContentControl x:Name="_menuContainer"> 
    <Menu/> 
</ContentControl> 

Et puis rédigez votre propriété comme ceci:

public Menu Menu 
{ 
    get { return (Menu)_menuContainer.Content; } 
    set { _menuContainer.Content = value; } 
} 
+0

Oui, je le fais déjà, mais j'espérais une solution qui n'impliquait pas un conteneur d'emballage (je suis minimaliste). Cela ne semble pas possible ... – David

+0

C'est possible. Vous devrez juste supprimer old/ajouter un nouveau 'Menu' à votre' Grid' dans le setter de la propriété. Mais je pense que cela causera plus de problèmes, alors des avantages. –

Questions connexes