【问题标题】:Is there a way to swap a StackPanel orientation from "Horizontal" to "Vertical" based on container width?有没有办法根据容器宽度将 StackPanel 方向从“水平”交换为“垂直”?
【发布时间】:2020-03-20 22:42:05
【问题描述】:

我目前在一个网格中有两个固定大小的元素,水平布局。用户要求能够垂直拉伸容器并水平收缩它,以使这两个元素垂直堆叠。我已经从 Grid 切换到 StackPanel,但我的最后一个障碍是改变方向。基本逻辑是:

    <StackPanel HorizontalAlignment="Center" Orientation="{Binding (ActualWidth < ActualHeight ? "Vertical" : "Horizontal")}">

如果这个问题过于含糊,我深表歉意,我还在习惯 WPF!如果回答此问题需要任何其他详细信息,请告诉我。

【问题讨论】:

  • 更改Orientation 将改变实际大小,进而改变方向。您最终可能会得到无限闪烁的控制。查看custom panel,因为制作专门的容器可能是最干净的方法。
  • 你考虑过WrapPanel吗?
  • 如果你想坚持StackPanel,要么写你自己的IValueConverter(使用我的整数到布尔作为例子mike.kozlowski.nl/…并将它变成方向的两倍)或使用QuckConverter(@987654323 @) - QuickConverter 不会为您提供设计时值。

标签: c# wpf xaml


【解决方案1】:

WrapPanel 应该给你你想要的行为。这是一个简单的例子:

<Grid>
    <WrapPanel HorizontalAlignment="Center">
        <Rectangle
            Width="200"
            Height="200"
            Fill="Red" />
        <Rectangle
            Width="200"
            Height="200"
            Fill="Blue" />
    </WrapPanel>
</Grid>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多