如何以编程方式更改WPF中的DockPanel?

时间:2010-01-16 16:51:16

标签: c# wpf wpf-controls dockpanel

注意:按要求,我已添加了我的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,并添加到其中:< / p>

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 个答案:

答案 0 :(得分:1)

首先,您的XAML已损坏。您有一个额外的</Grid>与打开网格标记无关。

我刚刚创建了一个项目,将你的XAML和Code复制到了后面,除了captilisation的区别并修复了额外的标签,我的工作正常。

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

检查所有代码并确保没有任何随机的无关标签浮动

答案 1 :(得分:0)

在您的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# Classes, TextBox and Reference, Easy(?) "does not exist in the current context"

答案 2 :(得分:0)

经过进一步测试和故障排除后,我发现我无法引用添加到Window1.xaml的任何控件,而不仅仅是DockPanel。要解决此问题,我必须将“MSBuild:Compile”添加到Window1.xaml文件属性中的自定义构建字段。

我不确定为什么该字段在我的项目中是空白的,但希望这会帮助其他人遇到同样的“错误”。