我正在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.
任何帮助都将受到高度赞赏,
阿诺德
答案 0 :(得分:1)
@ADBF您要将StackPanel
添加到两个不同的子集合中。每个UIElement在视觉树中应该只有一个父级,尽管UIElement可能有很多子级,具体取决于它的类型。
我认为您希望将stackpanelborder
添加到mainGrid
的子项中。
编辑:
此外,您应该在SetColumn / SetRow方法中引用stackpanelborder
而不是stackpanel
。
由于stackpanel
是stackpanelborder
的孩子,因此它将在该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>