C# 仅自动调整某些控件的大小
我正在开发一个WPF GUI,我想让窗口自动调整大小以适应内容,但不是所有内容:我有一些不同的按钮和其他控件,我想自动调整宽度。如果我在列表框中添加一个长项目,我希望窗口保持不变大小 示例代码:C# 仅自动调整某些控件的大小,c#,wpf,autosize,C#,Wpf,Autosize,我正在开发一个WPF GUI,我想让窗口自动调整大小以适应内容,但不是所有内容:我有一些不同的按钮和其他控件,我想自动调整宽度。如果我在列表框中添加一个长项目,我希望窗口保持不变大小 示例代码: <Window x:Class="QuickieWPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.mic
<Window x:Class="QuickieWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" SizeToContent="WidthAndHeight" ResizeMode="CanMinimize">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<Button Width="100" Content="Foo" Click="Button_Click"/>
<Button Width="100" Content="Bar" Click="Button_Click"/>
<Button Width="100" Content="Baz" Click="Button_Click"/>
</StackPanel>
<ListBox Grid.Row="1" Name="TheList" Height="100"/>
</Grid>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
string str = "This is a really long text item that will be wider than the " +
"three buttons. I want a horizontal scrollbar on the listbox, not a wider " +
"window. I want the window to size to the buttons, not to this listbox.";
this.TheList.Items.Add(str);
}
}
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
私有无效按钮\u单击(对象发送者,路由目标e)
{
string str=“这是一个非常长的文本项,比+
三个按钮。我希望列表框上有一个水平滚动条,而不是更宽的+
“窗口。我希望窗口的大小与按钮相符,而不是与此列表框相符。”;
this.TheList.Items.Add(str);
}
}
最初,窗口的大小取决于按钮:
在向列表框中添加一个长项目后,我当前得到以下信息:
但我宁愿得到这个:
(我上一次截图是通过在列表框上设置MaxWidth来完成的,但这对于完整的应用程序来说不是一个好的解决方案:在完整的应用程序中,它不仅仅是三个按钮;它是按钮、图标、文本框、标签等,我希望窗口能够自动调整到整个列表框,而不是底部的列表框。)您可以将不想自动调整大小的内容的宽度绑定到实际的内容宽度,例如:
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" x:Name="panel">
<Button Width="100"
Content="Foo"
Click="Button_Click" />
<Button Width="100"
Content="Bar"
Click="Button_Click" />
<Button Width="100"
Content="Baz"
Click="Button_Click" />
</StackPanel>
<ListBox Grid.Row="1"
Name="TheList"
Height="100" Width="{Binding ElementName=panel, Path=ActualWidth}" />
</Grid>
在这里,我将ListBox的宽度绑定到带有按钮的面板的实际宽度,在这种情况下,它可以达到您想要的宽度。您必须限制
ListBox的宽度,否则父窗口将根据SizeToContent=“WidthAndHeight”
占用空间最大的控件调整大小
给stackPanel起个名字,例如
<StackPanel Name="MyPanel" Orientation="Horizontal">
您需要在列表框中包含水平滚动
<StackPanel Name="MyPanel" Orientation="Horizontal">
Width="{Binding ElementName=MyPanel, Path=ActualWidth}"