【问题标题】:WPF adding stackpanel with border to grid gives errorWPF将带有边框的stackpanel添加到网格会出现错误
【发布时间】:2013-08-01 20:38:48
【问题描述】:

我正在处理 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.

任何帮助将不胜感激,

阿诺德

【问题讨论】:

    标签: wpf grid border


    【解决方案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>
    

    【讨论】:

    • 谢谢林格!现在可以了。也感谢您的解释。赞赏。
    • @ADBF 很高兴它有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    相关资源
    最近更新 更多