WPF添加带有边框到网格的stackpanel会出错

时间:2013-08-01 20:38:48

标签: wpf grid border

我正在WPF中使用嵌套网格/堆栈面板/网格窗口。它是一个Calander,有一个maingrid细胞是一天。在这一天,有一个文本框和一个stackpanel。 stackpanel包含一个网格。由于布局随当前月/年而变化,因此在运行时使用c#完成。除非我想在stackpanel上添加边框,否则没有重大问题。它给出了以下错误:

PresentationFramework.dll中出现未处理的“System.Windows.Markup.XamlParseException”类型异常 附加信息:'与指定的绑定约束匹配的类型'ADBF.ToezAcad.Admin.OpleidingKalender.MainWindow'上的构造函数的调用引发了异常。行号“3”和行位置“9”。

这个位置没什么特别的。

有趣的是,只有在我将stackpanel(带边框)添加到包含网格时才会出现此错误。

代码的简短版本:

Border stackpanelborder = new Border();
this.Content = stackpanelborder;
StackPanel stackpanel = new StackPanel();
stackpanelborder.Child = stackpanel;
Grid.SetColumn(stackpanel, m);                        
Grid.SetRow(stackpanel, d + 1);
mainGrid.Children.Add(stackpanel);  // if I uncomment this line, it throws the error.

任何帮助都将受到高度赞赏,

阿诺德

1 个答案:

答案 0 :(得分:1)

@ADBF您要将StackPanel添加到两个不同的子集合中。每个UIElement在视觉树中应该只有一个父级,尽管UIElement可能有很多子级,具体取决于它的类型。

我认为您希望将stackpanelborder添加到mainGrid的子项中。

编辑:

此外,您应该在SetColumn / SetRow方法中引用stackpanelborder而不是stackpanel

由于stackpanelstackpanelborder的孩子,因此它将在该UIElement内呈现。但是,需要告知stackpanelborder在网格中插入的位置,假设您打算稍后添加其他列/行。

基本上你的XAML文件如果有的话应该是这样的:

<Grid Name="mainGrid">
    <Grid.ColumnDefinitions>
        <ColumnDefinition .../>
        <ColumnDefinition .../> 
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition .../>
        <RowDefinition .../>  
    </Grid.RowDefinitions>
    <Border Name="stackpanelborder" Grid.Row="0" Grid.Column="0" ...>
        <StackPanel Name="stackpanel" .../>
    </Border>
</Grid>