C#WPF调整网格行大小控件以填充所有宽度
我试图让我的组合框拉伸以使用扩展窗口中的所有空白。如果窗口的宽度缩小,工具栏托盘将塌陷 我使用的网格有两列,宽度分别指定为*&300。 如何使组合框填充行中的所有可用空间C#WPF调整网格行大小控件以填充所有宽度,wpf,grid,resize,width,row,Wpf,Grid,Resize,Width,Row,我试图让我的组合框拉伸以使用扩展窗口中的所有空白。如果窗口的宽度缩小,工具栏托盘将塌陷 我使用的网格有两列,宽度分别指定为*&300。 如何使组合框填充行中的所有可用空间 只需更改列宽定义: <Grid DockPanel.Dock="Top"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnD
只需更改列宽定义:
<Grid DockPanel.Dock="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
默认情况下,组合框的水平和垂直对齐设置为“拉伸”
可能是第一列,您可以输入硬编码大小
但是,如果您的GUI需要更多的空间来变得更好,请在工具栏托盘和组合框周围留出一些空白
关于只需更改列宽定义:
<Grid DockPanel.Dock="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
默认情况下,组合框的水平和垂直对齐设置为“拉伸”
可能是第一列,您可以输入硬编码大小
但是,如果您的GUI需要更多的空间来变得更好,请在工具栏托盘和组合框周围留出一些空白
关于只需更改列宽定义:
<Grid DockPanel.Dock="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
默认情况下,组合框的水平和垂直对齐设置为“拉伸”
可能是第一列,您可以输入硬编码大小
但是,如果您的GUI需要更多的空间来变得更好,请在工具栏托盘和组合框周围留出一些空白
关于只需更改列宽定义:
<Grid DockPanel.Dock="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
默认情况下,组合框的水平和垂直对齐设置为“拉伸”
可能是第一列,您可以输入硬编码大小
但是,如果您的GUI需要更多的空间来变得更好,请在工具栏托盘和组合框周围留出一些空白
关于使用HorizontalAlignment=“Strech”
请参阅下面的代码
<ComboBox Grid.Column="1" MinWidth="200" HorizontalAlignment="Stretch"></ComboBox>
使用HorizontalAlignment=“Strech”
请参阅下面的代码
<ComboBox Grid.Column="1" MinWidth="200" HorizontalAlignment="Stretch"></ComboBox>
使用HorizontalAlignment=“Strech”
请参阅下面的代码
<ComboBox Grid.Column="1" MinWidth="200" HorizontalAlignment="Stretch"></ComboBox>
使用HorizontalAlignment=“Strech”
请参阅下面的代码
<ComboBox Grid.Column="1" MinWidth="200" HorizontalAlignment="Stretch"></ComboBox>
好的,如果你想让工具栏完全崩溃,我找到的唯一解决方案就是写一点代码。 仅在XAML中使用布局会更加优雅,但有时C#代码是唯一的方法
private void ToolbarSizeChanged(object sender, SizeChangedEventArgs e)
{
const double COMBO_MIN_DESIRED_WIDTH = 300.0;
Size newSize = e.NewSize;
Size sizeToolbarTray = new Size(Double.PositiveInfinity, newSize.Height);
// measure to update DesiredSize
toolBarTray.Measure(sizeToolbarTray);
Rect toolBarTrayRect = new Rect(0, 0, 0, newSize.Height);
Rect comboRect =new Rect(0,0,0,newSize.Height);
// 3 cases :
// 1) Much space is available
if (newSize.Width > toolBarTray.DesiredSize.Width + COMBO_MIN_DESIRED_WIDTH)
{
toolBarTrayRect.Width = toolBarTray.DesiredSize.Width;
comboRect.X = toolBarTrayRect.Width;
comboRect.Width = newSize.Width -toolBarTrayRect.Width;
}
// 2) Space to show Combo, but not totally toolbar
else if (newSize.Width > COMBO_MIN_DESIRED_WIDTH)
{
toolBarTrayRect.Width = newSize.Width - COMBO_MIN_DESIRED_WIDTH;
comboRect.X = toolBarTrayRect.Width;
comboRect.Width = COMBO_MIN_DESIRED_WIDTH;
}
// 3) Not enough space to show toolbar
else
{
toolBarTrayRect.Width = 0;
comboRect.Width = newSize.Width;
}
// Layout the two components :
toolBarTray.Arrange(toolBarTrayRect);
combobox.Arrange(comboRect);
}
希望我理解了你的愿望并对你有所帮助,好吧,如果你想让工具栏完全崩溃,我找到的唯一解决办法就是写一点代码。 仅在XAML中使用布局会更加优雅,但有时C#代码是唯一的方法
private void ToolbarSizeChanged(object sender, SizeChangedEventArgs e)
{
const double COMBO_MIN_DESIRED_WIDTH = 300.0;
Size newSize = e.NewSize;
Size sizeToolbarTray = new Size(Double.PositiveInfinity, newSize.Height);
// measure to update DesiredSize
toolBarTray.Measure(sizeToolbarTray);
Rect toolBarTrayRect = new Rect(0, 0, 0, newSize.Height);
Rect comboRect =new Rect(0,0,0,newSize.Height);
// 3 cases :
// 1) Much space is available
if (newSize.Width > toolBarTray.DesiredSize.Width + COMBO_MIN_DESIRED_WIDTH)
{
toolBarTrayRect.Width = toolBarTray.DesiredSize.Width;
comboRect.X = toolBarTrayRect.Width;
comboRect.Width = newSize.Width -toolBarTrayRect.Width;
}
// 2) Space to show Combo, but not totally toolbar
else if (newSize.Width > COMBO_MIN_DESIRED_WIDTH)
{
toolBarTrayRect.Width = newSize.Width - COMBO_MIN_DESIRED_WIDTH;
comboRect.X = toolBarTrayRect.Width;
comboRect.Width = COMBO_MIN_DESIRED_WIDTH;
}
// 3) Not enough space to show toolbar
else
{
toolBarTrayRect.Width = 0;
comboRect.Width = newSize.Width;
}
// Layout the two components :
toolBarTray.Arrange(toolBarTrayRect);
combobox.Arrange(comboRect);
}
希望我理解了你的愿望并对你有所帮助,好吧,如果你想让工具栏完全崩溃,我找到的唯一解决办法就是写一点代码。 仅在XAML中使用布局会更加优雅,但有时C#代码是唯一的方法
private void ToolbarSizeChanged(object sender, SizeChangedEventArgs e)
{
const double COMBO_MIN_DESIRED_WIDTH = 300.0;
Size newSize = e.NewSize;
Size sizeToolbarTray = new Size(Double.PositiveInfinity, newSize.Height);
// measure to update DesiredSize
toolBarTray.Measure(sizeToolbarTray);
Rect toolBarTrayRect = new Rect(0, 0, 0, newSize.Height);
Rect comboRect =new Rect(0,0,0,newSize.Height);
// 3 cases :
// 1) Much space is available
if (newSize.Width > toolBarTray.DesiredSize.Width + COMBO_MIN_DESIRED_WIDTH)
{
toolBarTrayRect.Width = toolBarTray.DesiredSize.Width;
comboRect.X = toolBarTrayRect.Width;
comboRect.Width = newSize.Width -toolBarTrayRect.Width;
}
// 2) Space to show Combo, but not totally toolbar
else if (newSize.Width > COMBO_MIN_DESIRED_WIDTH)
{
toolBarTrayRect.Width = newSize.Width - COMBO_MIN_DESIRED_WIDTH;
comboRect.X = toolBarTrayRect.Width;
comboRect.Width = COMBO_MIN_DESIRED_WIDTH;
}
// 3) Not enough space to show toolbar
else
{
toolBarTrayRect.Width = 0;
comboRect.Width = newSize.Width;
}
// Layout the two components :
toolBarTray.Arrange(toolBarTrayRect);
combobox.Arrange(comboRect);
}
希望我理解了你的愿望并对你有所帮助,好吧,如果你想让工具栏完全崩溃,我找到的唯一解决办法就是写一点代码。 仅在XAML中使用布局会更加优雅,但有时C#代码是唯一的方法
private void ToolbarSizeChanged(object sender, SizeChangedEventArgs e)
{
const double COMBO_MIN_DESIRED_WIDTH = 300.0;
Size newSize = e.NewSize;
Size sizeToolbarTray = new Size(Double.PositiveInfinity, newSize.Height);
// measure to update DesiredSize
toolBarTray.Measure(sizeToolbarTray);
Rect toolBarTrayRect = new Rect(0, 0, 0, newSize.Height);
Rect comboRect =new Rect(0,0,0,newSize.Height);
// 3 cases :
// 1) Much space is available
if (newSize.Width > toolBarTray.DesiredSize.Width + COMBO_MIN_DESIRED_WIDTH)
{
toolBarTrayRect.Width = toolBarTray.DesiredSize.Width;
comboRect.X = toolBarTrayRect.Width;
comboRect.Width = newSize.Width -toolBarTrayRect.Width;
}
// 2) Space to show Combo, but not totally toolbar
else if (newSize.Width > COMBO_MIN_DESIRED_WIDTH)
{
toolBarTrayRect.Width = newSize.Width - COMBO_MIN_DESIRED_WIDTH;
comboRect.X = toolBarTrayRect.Width;
comboRect.Width = COMBO_MIN_DESIRED_WIDTH;
}
// 3) Not enough space to show toolbar
else
{
toolBarTrayRect.Width = 0;
comboRect.Width = newSize.Width;
}
// Layout the two components :
toolBarTray.Arrange(toolBarTrayRect);
combobox.Arrange(comboRect);
}
希望我理解了您的愿望并对您有所帮助,因为使用
Width=“Auto
可以防止工具栏托盘正确折叠。最终我指定了Width=“*”MaxWidth=“400”
和Width=“*”MinWidth=“500”“
用于各个列。这是一个解决办法,我必须找到工具栏托盘的绝对宽度,比如说400,并设置为MaxWidth。这不是最好的方法,因为向工具栏托盘添加新项目意味着再次找到绝对宽度。我希望有一个更好的解决方案。我用我的解决方案尝试了一下你的代码,看起来还不错。我可以调整工具栏的大小,右边没有多余的空间。崩溃的问题到底是什么?这是我的比较解决方案,这是我的示例解决方案。随着窗口宽度的减小,组合框会按下工具栏托盘,折叠按钮。好的,我下载了你的代码,对我来说,没关系,我不会