Как программно изменить DockPanel в WPF? - PullRequest
3 голосов
/ 16 января 2010

Примечание: По запросу я добавил полный код для моих файлов XAML и xaml.cs.

В WPF я создал DockPanel примерно так:

<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>

Я хочу программно добавить TreeView к DockPanel, но в Window1.xaml.cs я не могу получить DockPanel по имени и добавить к нему:

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);
    }
  }
}

Приведенный выше код возвращает следующую ошибку:

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

Я уверен, что только что пропустил что-то простое. Есть идеи?

Ответы [ 3 ]

1 голос
/ 17 января 2010

Во-первых, ваш XAML сломан. У вас есть дополнительный </Grid>, который не связан с открывающим тегом Grid.

Я только что создал проект, скопировал ваш XAML и код, и, кроме различий в захвате и исправлении дополнительного тега, мой работает нормально.

Мой полный 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>

Код сзади:

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

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

Проверьте все свои теги и убедитесь, что у вас нет случайных посторонних тегов, плавающих вокруг

0 голосов
/ 17 января 2010

После дальнейшего тестирования и устранения неисправностей я обнаружил, что не могу сослаться ни на один элемент управления, добавленный в Window1.xaml, а только на DockPanel. Чтобы решить эту проблему, мне пришлось добавить «MSBuild: Compile» в поле «Выборочная сборка» в свойствах файла Window1.xaml.

Я не уверен, почему это поле было пустым в моем проекте, но, надеюсь, это поможет другим, испытывающим такую ​​же "ошибку".

0 голосов
/ 16 января 2010

В вашем xaml у вас есть правильный атрибут класса для окна?

<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>

См. Здесь: Классы WPF C #, TextBox и справочник, Easy (?) "Не существует в текущем контексте"

...