0

我正在处理 WPF 中的嵌套网格/堆栈面板/网格窗口。它是一个 Calander,一个主网格单元格是一天。在这一天,有一个文本框和一个堆栈面板。堆栈面板包含一个网格。一切都在 c# 中完成,在运行时构建,因为布局会随着当前月份/年份而变化。到目前为止没有大问题,除非我想为堆栈面板添加边框。它给出了以下错误:

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

这个位置没什么特别的。

有趣的是,当我将堆栈面板(带边框)添加到包含网格时,它只会给出这个错误。

代码的简短版本:

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.

任何帮助将不胜感激,

阿诺德

4

1 回答 1

1

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

我想你想添加stackpanelborder到的孩子mainGrid而不是。

编辑:

此外,您应该stackpanelborder在 SetColumn/SetRow 方法中引用 not 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>
于 2013-08-01T20:48:09.873 回答