c# - 用户控件的 WPF 布局作为运行

标签 c# wpf .net-3.5 layout user-controls

在 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/

相关文章:

c# - 覆盖 LINQ .Include(),可能吗?

.net - 如何强制应用程序使用 .NET 3.5 或更高版本?

c# - 在 asp.net 中检测用户域

c# - 查找本地服务器的 IP 地址

c# - 输入字符串不是有效数字 - JSON 反序列化

c# - 将控件绑定(bind)到转义属性?

c# - 笔刷动画

wpf - 元素移动时绑定(bind)到 Canvas.Left 会中断

c# - 这是方法体中多键字典的有效代码吗?

c# - 绘制控件