c# - WPF Grid 在 MinWidth 上更改 ColumnSpan
问题描述
假设我有一个 4 列的网格。每列采用相同的宽度
-> 100% / 4cols = 25%。
第三列中有一个TextBlock
或任何其他控件。现在,当我将 the 的大小调整为Width
a时,我希望使用else会太小。我希望你们明白我的意思。我尝试了很多东西,但我什至没有接近我想要的,因为我对. 例如,设置它不会变得太小是行不通的,因为在某些时候,控件仍将隐藏在网格列中。我对你没有任何用处,除非你只想要网格布局。也许 a不是我想要的正确的东西?其他布局似乎不适合此目的。任何帮助表示赞赏。Window
column
minimum value
TextBlock
ColumnSpan="2"
TextBlock
WPF
minWidth
xaml
Grid
解决方案
您可以处理 或 窗口的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
延伸到第三列和第四列。
推荐阅读
- javascript - A-frame 隐藏 vr 模式符号
- html - 浏览器如何插入 HTML 和 Header?
- python - 在 JSON 列表中搜索
- java - Java中非拉丁字母的排序列表
- apache-nifi - 无法查询 StandardFlowfileRecord
- power-automate - 如何在 Power Automate 中拦截 HTTP 重定向响应?
- asp.net-core - Razor Page Call Modal From Code Behind on post async
- fiddler - Fiddler 代理服务器、vps 、电报机器人
- json - 使用 --format 的 Docker 上下文输出
- coldfusion - Tesla API - 无法获取授权码