首页 > 解决方案 > WPF Grid 在 MinWidth 上更改 ColumnSpan

问题描述

假设我有一个 4 列的网格。每列采用相同的宽度

-> 100% / 4cols = 25%。

第三列中有一个TextBlock或任何其他控件。现在,当我将 the 的大小调整为Widtha时,我希望使用else会太小。我希望你们明白我的意思。我尝试了很多东西,但我什至没有接近我想要的,因为我对. 例如,设置它不会变得太小是行不通的,因为在某些时候,控件仍将隐藏在网格列中。我对你没有任何用处,除非你只想要网格布局。也许 a不是我想要的正确的东西?其他布局似乎不适合此目的。任何帮助表示赞赏。Windowcolumnminimum valueTextBlockColumnSpan="2"TextBlockWPFminWidthxamlGrid

在此处输入图像描述

标签: c#wpflayoutgrid

解决方案


您可以处理 或 窗口的SizeChanged事件,并在网格/窗口缩小到预定义的最小宽度以下时以Grid编程方式设置 的Grid.ColumnSpan附加属性。TextBlock请参考以下示例代码。

private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
{
    const double MinWidth = 200;
    Grid grid = (Grid)sender;
    if (grid.ActualWidth < MinWidth)
        Grid.SetColumnSpan(textBlock, 2);
    else
        Grid.SetColumnSpan(textBlock, 1);
}

XAML:

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="300" Width="300">
    <Grid SizeChanged="Grid_SizeChanged">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="25*" />
            <ColumnDefinition Width="25*" />
            <ColumnDefinition Width="25*" />
            <ColumnDefinition Width="25*" />
        </Grid.ColumnDefinitions>
        <TextBlock Background="Yellow" Text="1" />
        <TextBlock Background="Green" Text="2" Grid.Column="1" />
        <TextBlock Background="Red" Text="4" Grid.Column="3"  />
        <TextBlock x:Name="textBlock" Background="Blue" Text="3" Grid.Column="2" Grid.ColumnSpan="2" />
    </Grid>
</Window>

如果您减小窗口的宽度,蓝色会TextBlock延伸到第三列和第四列。


推荐阅读