我有這個相同的問題,並提出了這個解決方案。基本上,想法是在網格/列更改時動態更改適當列的MaxWidth。我在這裏展示了兩列,但我已經成功使用了三列的這種方法。
使用這種方法,如果您調整窗口大小不再適合網格的內容,網格會停止更改大小,因此ResizeGrid_SizeChanged事件將停止調用。爲了解決這個問題,您還可以偵聽窗口(或用戶控件)尺寸更改事件。您可能還需要適當地綁定網格的MaxWidth,或者如果網格填充窗口/ UserControl,則直接使用控件大小。我已經展示瞭如何通過XAML在這裏綁定MaxWidth屬性。如果您不想這樣做,則可以在後面的窗口代碼中將「ResizeGrid.MaxWidth」替換爲「ActualWidth」,並在「ResizeGrid」對象上刪除「MaxWidth」綁定。
XAML:
<Window x:Class="App.Window1"
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"
xmlns:Default="clr-namespace:App"
mc:Ignorable="d"
SizeChanged="Window_SizeChanged"
Title="Window1" Height="300" Width="300">
<Grid>
<Grid x:Name="ResizeGrid" SizeChanged="ResizeGrid_SizeChanged"
MaxWidth="{Binding ActualWidth, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Default:Window1}}}">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="C0" Width="150" MinWidth="50" />
<ColumnDefinition Width="5" />
<ColumnDefinition x:Name="C2" Width="*" MinWidth="50" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0" Background="Green">
<Label Content="Left" />
<Label Content="Right" HorizontalAlignment="Right" />
</Grid>
<GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Stretch" DragCompleted="GridSplitter_DragCompleted" />
<Grid Grid.Column="2" Background="Red">
<Label Content="Left" />
<Label Content="Right" HorizontalAlignment="Right" />
</Grid>
</Grid>
</Grid>
</Window>
C#代碼
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
UpdateGridSplitterWidths();
}
private void ResizeGrid_SizeChanged(object sender, SizeChangedEventArgs e)
{
UpdateGridSplitterWidths();
}
private void GridSplitter_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
{
UpdateGridSplitterWidths();
}
private void UpdateGridSplitterWidths()
{
C0.MaxWidth = Math.Min(ResizeGrid.ActualWidth, ResizeGrid.MaxWidth) - (C2.MinWidth + 5);
}
背後嘗試設置'MinWidth'爲'Grid'的'ColumnDefinitions'。 – Nitesh
感謝您的回覆。試過了,沒有運氣。我也試過*大小的列沒有結果。當我將窗口大小更改爲其內容時,控件將保留在窗口框架中,但窗口大小會發生變化。理想情況下,我希望實現窗口大小是固定的,並且所有其他大小都是自動大小/比例大小的。 – elm