WPF网格更改MinWidth上的ColumnSpan

时间:2018-08-20 09:41:52

标签: c# wpf layout grid

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

-> 100%/ 4cols = 25%。

第三列中有一个TextBlock或任何其他控件。现在,当我调整Width的{​​{1}}的大小并且Window到达column时,我希望minimum value使用TextBlock else ColumnSpan="2"太小。我希望你们能理解我的意思。我尝试了很多事情,但我什至没有达到我想要的目标,因为我对TextBlock很陌生。例如,将WPF设置得不会太小是行不通的,因为在某些时候控件仍将隐藏在grid列内。除非您只是想要网格布局,否则我对您没有任何有用的minWidth。也许xaml不是我想要的正确的东西吗?其他布局似乎不适用于此目的。任何帮助表示赞赏。

enter image description here

1 个答案:

答案 0 :(得分:1)

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

TextBlock

XAML:

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);
}

如果减小窗口的宽度,蓝色的<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> 会在第三和第四列上出现条纹。