2010-01-16 6 views
3

Note: Par demande, j'ai ajouté le code complet pour mes fichiers XAML et xaml.cs.Comment modifier un DockPanel par programmation dans WPF?

En WPF, j'ai créé un DockPanel comme ceci:

<Window x:Class="RealEditor.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:forms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 
     Title="RealEditor" Height="500" Width="700"> 
    <DockPanel> 
     <GridSplitter Grid.Column="1" Width="4" HorizontalAlignment="Left"/> 
     <DockPanel x:Name="ftpDock" Grid.Row="1" Grid.Column="1"></DockPanel> 
    </Grid>??? 
    </DockPanel> 
</Window> 

Je veux ajouter un programme TreeView au DockPanel, mais Window1.xaml.cs, je suis incapable d'obtenir le DockPanel par nom et y ajouter:

namespace RealEditor 
{ 
/// <summary> 
/// Interaction logic for Window1.xaml 
/// </summary> 
    public partial class Window1 : Window 
    { 
    public Window1() 
    { 
     InitializeComponent(); 
     TreeViewItem mytreeView = new TreeViewItem(); 
     ftpDock.Children.Add(myTreeView); 
    } 
    } 
} 

le code ci-dessus renvoie l'erreur suivante:

"The name 'ftpDock' does not exist in the current context" 

Je suis sûr que j'ai manqué quelque chose de simple. Des idées?

+1

Afficher plus de code, XAML et le code derrière. –

Répondre

0

Sur d'autres tests et le dépannage, j'ai trouvé que j'étais incapable de référencer n'importe quel contrôle ajouté à Window1.xaml, pas seulement le DockPanel. Pour corriger le problème, j'ai dû ajouter "MSBuild: Compile" au champ Custom Build dans les propriétés du fichier Window1.xaml.

Je ne suis pas sûr pourquoi ce champ était vide dans mon projet, mais j'espère que cela aidera d'autres personnes éprouvant le même "bug".

+0

comment étrange, bon d'entendre que vous l'avez résolu. –

0

Dans votre xaml, avez-vous le bon attribut de classe pour la fenêtre?

<Window x:Class="YourAssemblyName.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"> 
    <Grid> 
      <DockPanel Grid.Row="1" x:Name="ftpDock" Grid.Column="1"></DockPanel> 
    </Grid> 
</Window> 

Voir ici: WPF C# Classes, TextBox and Reference, Easy(?) "does not exist in the current context"

+0

Oui, l'attribut class est correct dans XAML et j'essaye d'accéder au DockPanel dans la classe Window1: Window. – CheapDevotion

+0

Où dans la classe Window1? Et à quoi ressemble exactement votre xaml? Cuz un fichier .Window1 comme ce que j'ai posté ci-dessus vous permettra d'accéder à ftpDock dans le codebehind. Il est impossible de savoir comment résoudre votre problème sans plus d'informations. –

+0

Ajouté le code complet à l'article d'origine. – CheapDevotion

1

Tout d'abord, votre XAML est cassé. Vous avez un </Grid> supplémentaire qui n'est pas associé à l'ouverture du tag Grid.

Je viens de créer un projet, j'ai copié votre code XAML et mon code, et en dehors de la différence de captilisation et de la fixation de l'étiquette supplémentaire, le mien fonctionne bien.

toute mon XAML:

<Window x:Class="WPFTest.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"> 
    <DockPanel> 
     <GridSplitter Grid.Column="1" Width="4" HorizontalAlignment="Left"/> 
     <DockPanel x:Name="ftpDock" Grid.Row="1" Grid.Column="1"></DockPanel> 
    </DockPanel> 
</Window> 

code Derrière:

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     InitializeComponent(); 

     TreeViewItem mytreeView = new TreeViewItem(); 
     ftpDock.Children.Add(mytreeView); 
    } 
} 

Vérifiez toutes vos balises et assurez-vous que vous n'avez pas des balises étrangères aléatoires flottant autour

Questions connexes