[英]WPF move middle control to next row when width exceeds available space
我目前在窗口頂部有3個UserControl,我想根據可用的房地產來相應地安排它們。 我想要的是在有可用空間的情況下使3個控件水平對齊,但是當窗口調整大小時,我希望中心控件向下移動到新的行/行。 左右控件應始終水平對齊。 所有3個控件均為固定寬度。 下面的例子。
我試過使用WrapPanel
和DockPanel
但我不認為這兩個都是我想要的。 我想我想要的是介於兩者之間的某個地方。
是否可以通過任何標准的WPF控件來執行此操作,或者是擴展Panel
並自己實現此邏輯的最佳解決方案?
這稱為自適應布局,WPF沒有內置的控件來支持這種布局。 盡管使用觸發器可能會得到一些令人愉快的結果。 請查看: 如何在WPF中創建自適應布局?
我試圖實現您想要的相同功能。 這是我的代碼的結果:
XAML:
<Window x:Class="Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800"
TextOptions.TextFormattingMode="Display">
<Grid x:Name="Grid" Margin="20" VerticalAlignment="Top" SizeChanged="Grid_SizeChanged">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Button Width="160" Height="40" VerticalAlignment="Top" Content="Left UserControl"/>
<Button x:Name="MiddleUserControl" Grid.ColumnSpan="3" Width="300" Height="60" Content="Middle UserControl"/>
<Button Grid.Column="2" Width="160" Height="40" VerticalAlignment="Top" Content="Right UserControl"/>
</Grid>
</Window>
C#:
using System.Windows;
using System.Windows.Controls;
namespace Test
{
/// <summary>
/// Логика взаимодействия для MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (Grid.ColumnDefinitions[1].ActualWidth < MiddleUserControl.ActualWidth + 40)
{
Grid.SetRow(MiddleUserControl, 1);
MiddleUserControl.Margin = new Thickness(0, 20, 0, 0);
}
else
{
Grid.SetRow(MiddleUserControl, 0);
MiddleUserControl.Margin = new Thickness(0);
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.