c# - SizeToContent.Width 和 TreeView

标签 c# wpf treeview

我有一个包含三个不同控件的网格,两个是组框,第三个是 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 = "*"、Horizo​​ntalContentAlignment 和许多其他不同的方法,我还尝试将它放在 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/

相关文章:

c# - Entity Framework - 重复处理

c# - WPF 中的 clr-namespace 错误(重命名命名空间)

vb.net - 更改treeview子节点颜色文本颜色和图像

python - tkinter - ttk TreeView : see column text

c# - 将节点添加到特定的子节点

c# - 如何绑定(bind)和 ConvertBack 分隔的 TextBox 字符串到 ObservableCollection<string>?

c# - 从 3.4 alpha 升级到 Microsoft.IdentityModel.Clients.ActiveDirectory 3.10

c# - 单点登录:我应该往哪个方向走?

c# - 为TimePicker设置24小时制时间格式

c# - WPF 始终在最前面