在 WPF 中,我想创建一个如下所示的窗口:
Application with user controls http://www.freeimagehosting.net/uploads/86209e1a87.png
屏幕上有四个用户控件,#1、2、3、4。如您所见,用户控件 2 不应呈现为框,而是内联。
如果这是一个 WPF 流文档:
- 1、3、4 将是一个段落(装箱)
- 2 次运行(内联)
原因是 2 可以以另一种形式使用而无需拆分为 3。
你知道如何以正确的方式做到这一点吗?
一些想法已经想到:
- 2是普通用户控件 (拳击)。放在窗边时, 2, 3, 4 被放置在 Canvas 中,使用 有 Z-Order 和 margin ton 控制 它们是如何呈现的
- 2 有一个已经格式化的网格,因此它可以在其中接受 3 和 4 作为 ContentControl,我们通过 Xaml 或代码隐藏注入(inject)它们
- 2 将主网格公开为一个属性,并且通过附加属性善良,我们为 3 和 4 添加数据
- 我们创建自己的布局控件并实现 Arrange 和 Measure 方法来创建一个类似于 Run 的布局
还有一些不干净的...
有什么想法吗?
谢谢,
帕特里克
最佳答案
我认为你的表格分解不正确,IMO。
区域 2 不应包含您描述的要“内联”的底部部分。
它应该分开(就布局而言),并且可能适合包含 2 列和 2 行的网格以及区域 3 和区域 4。然后区域 3 的行跨度需要为 2。
在这种情况下,如果以这种方式完成,XAML 实际上会非常干净。
它可能看起来像这样:
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<uC:Area1 Grid.Row="0"><!-- Area Control here --></uC:Area1>
<uC:Area2 Grid.Row="1"><!-- Area Control here --></uC:Area2>
<Grid Grid.Row="2">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<uC:AreaDuree Grid.Row="0" Grid.Column="0">
<!-- Area Control here -->
</uC:AreaDuree>
<uC:Area4 Grid.Row="1" Grid.Column="0">
<!-- Area Control here -->
</uC:Area4>
<uC:Area3 Grid.RowSpan="2" Grid.Column="1">
<!-- Area Control here -->
</uC:Area3>
</Grid>
</Grid>
关于c# - 用户控件的 WPF 布局作为运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1744497/