WPF网格-按一定顺序调整列大小
我有一个WPF网格问题。我需要一些帮助 我有一个网格从左到右分为两列,例如col1和col2。此网格绑定到窗口边缘,没有填充: |--col1----col2--← 右窗口边框 如何使这些列与应用程序窗口一起按特定顺序调整大小 我的意思是: 当我从右边框收缩窗口时,首先需要col2来调整大小。当col2达到其最小宽度时,col1开始收缩,我继续移动窗口的右边框 是否可以定义列更改大小的顺序? 或者我需要一些别的东西,除了网格WPF网格-按一定顺序调整列大小,wpf,blend,gridsplitter,Wpf,Blend,Gridsplitter,我有一个WPF网格问题。我需要一些帮助 我有一个网格从左到右分为两列,例如col1和col2。此网格绑定到窗口边缘,没有填充: |--col1----col2--← 右窗口边框 如何使这些列与应用程序窗口一起按特定顺序调整大小 我的意思是: 当我从右边框收缩窗口时,首先需要col2来调整大小。当col2达到其最小宽度时,col1开始收缩,我继续移动窗口的右边框 是否可以定义列更改大小的顺序? 或者我需要一些别的东西,除了网格 谢谢。了解如何处理事件并激发自己的热情是理解C语言的基石,因此我强烈建
谢谢。了解如何处理事件并激发自己的热情是理解C语言的基石,因此我强烈建议您仔细阅读。也就是说,这会让你开始,虽然我不确定这正是你想要的。。。请参见下面的示例代码。当窗口宽度增加时,我将编写代码作为练习留给您。。祝你好运 在我的主窗口上,我设置了高度=250,宽度=600,其中的网格有两列
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="_col1" MinWidth="200" />
<ColumnDefinition x:Name="_col2" MinWidth="150"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="_txtCol1Width"
Grid.Column="0"
Background="Crimson" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
<TextBlock x:Name="_txtCol2Width"
Grid.Column="1"
Background="Turquoise" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
</Grid>
x
在启动时,在开始最小化窗口之前,两列的宽度是否相等?好吧,让我们假设是-相等。我想有点-不,不相等。这有什么区别吗?我不太擅长处理事件:-。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;
this.SizeChanged += MainWindow_SizeChanged;
}
void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (this.IsLoaded && e.WidthChanged)
{
double changeInWindowWidth = e.NewSize.Width - e.PreviousSize.Width;
if (changeInWindowWidth < 0)
{
if (_col2.ActualWidth + changeInWindowWidth >= _col2.MinWidth)
{
// col 2 has not yet reached its minimum (decrease col2, no change for col1)
_col2.Width = new GridLength(_col2.ActualWidth + changeInWindowWidth, GridUnitType.Pixel);
_col1.Width = new GridLength(_col1.ActualWidth + 0, GridUnitType.Pixel);
}
else if (_col1.ActualWidth + changeInWindowWidth >= _col1.MinWidth)
{
// col 2 has reached its minimum, but col1 has not (decrease col1, no change for col2)
_col1.Width = new GridLength(_col1.ActualWidth + changeInWindowWidth, GridUnitType.Pixel);
_col2.Width = new GridLength(_col2.ActualWidth + 0, GridUnitType.Pixel);
}
else
{
// both columns have reached their minimum, so decrease width of both equally
_col1.MinWidth = _col1.ActualWidth + 0.5 * changeInWindowWidth;
_col2.MinWidth = _col2.ActualWidth + 0.5 * changeInWindowWidth;
_col1.Width = new GridLength(_col1.MinWidth, GridUnitType.Pixel);
_col2.Width = new GridLength(_col2.MinWidth, GridUnitType.Pixel);
}
}
else
{
// todo: handle window width increased ...
}
UpdateTexts();
}
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
UpdateTexts();
}
private void UpdateTexts()
{
_txtCol1Width.Text = String.Format("column {0}\nActualWidth: {1}\n(MinWidth: {2})", 1, _col1.ActualWidth, _col1.MinWidth);
_txtCol2Width.Text = String.Format("column {0}\nActualWidth: {1}\n(MinWidth: {2})", 2, _col2.ActualWidth, _col2.MinWidth);
}
}