我有一个包含三个不同控件的网格,两个是组框,第三个是 TreeView 。 我不知道初始宽度,所以 Window.SizeToContent 设置为“宽度” 一切都完美地适合窗口,当我从 TreeView 扩展一个节点时,问题来了,Window.Width 调整到 treeView 完美适合的新宽度,但其余控件不是那么好。
我想保留 SizeToContent 给出的“原始”宽度,并在扩展 treeViewNode 而不是更改整个 Window.Width 时获得一个 ScrollBar
这是 xaml(只有主网格和 TreeView )
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!--Attachments-->
<GroupBox x:Name="gbAttachments" Header="Attachments" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" HorizontalContentAlignment="Stretch">
<TreeView x:Name="tvAttachments" BorderThickness="0" ScrollViewer.HorizontalScrollBarVisibility="Visible" />
</GroupBox>
<!--Attachments-->
</Grid>
我尝试使用 ColumnDefinition.Width = "*"、HorizontalContentAlignment 和许多其他不同的方法,我还尝试将它放在 ScrollbarViewer 中,但似乎没有任何效果。总是当我扩展节点时,整个窗口都会用节点的内容扩展(实际上它很长)。我很确定问题出在 Window.SizeToContent = 'Width' 但如果我不知道原始宽度,我还能为其余控件做些什么?任何想法,提前致谢!
--编辑
好吧,解决方案比预期的要容易,在 Window_Loaded 事件中,我得到 gbAttachments.ActualWidth 并将其分配给 TreeView.MaxWidth 不漂亮,很确定它可以通过 xaml 完成,但它正在工作。
最佳答案
您可以尝试设置树中节点的 MaxWidth
属性:
<Style TargetType="TreeViewItem">
<Setter Property="MaxWidth" Value="80"></Setter>
</Style>
或者,您可以将此值绑定(bind)到某些东西,例如另一个元素:
<Style TargetType="TreeViewItem">
<Setter Property="MaxWidth"
Value="{Binding ElementName=gbAttachments, Path=ActualWidth}"></Setter>
</Style>
此外,如果您担心窗口在初始化后不需要自动调整大小,您可以尝试在代码后面做一些事情,以便自动调整仅在窗口初始化时发生:
public MainWindow()
{
InitializeComponent();
// auto-size width, and save off value
this.SizeToContent = System.Windows.SizeToContent.Width;
var actualWidth = this.ActualWidth;
// manual-size width
this.SizeToContent = System.Windows.SizeToContent.Manual;
// set value to what it was, when auto-sized
this.Width = actualWidth;
}
关于c# - SizeToContent.Width 和 TreeView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39169670/