gpt4 book ai didi

wpf - 如何拉伸(stretch) TreeViewItem 宽度以填充父项?

转载 作者:行者123 更新时间:2023-12-04 21:05:23 26 4
gpt4 key购买 nike

我有一个 WPF TreeView,我想将 TreeViewItem 扩展到整个空间,就像它的父级一样。

<TreeView Name="treeFamilies" AllowDrop="True" >
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:MyNode}" ItemsSource="{Binding Members}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" Background="LightGray"/>
<TextBlock Text=" [" Foreground="Blue" Background="LightGray"/>
<TextBlock Text="{Binding Members.Count}" Foreground="Blue" Background="LightGray"/>
<TextBlock Text="]" Foreground="Blue" Background="LightGray" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>

看来我正在使用 ItemContainer 样式 <Setter Property="HorizontalContentAlignment" Value="Stretch"/>错。我现在的树看起来像这张照片:

pic1

我希望拉伸(stretch)灰色背景以填充 TreeView 控件的整个末端。
我怎么能做到这一点?

最佳答案

Form Il Vic 的评论,this msdn blog显示了从 TreeViewItem 中删除最后一列的类似 hack 的方法.

万一博客关闭,我在这里复制我的工作代码。在 TreeViewItem 之后已加载,我删除了第三个 ColumnDefinition从网格中,设置第二个 ColumnDefinition宽度为 * ;

public class StretchingTreeViewItem : TreeViewItem
{
public StretchingTreeViewItem()
{
this.Loaded += new RoutedEventHandler(StretchingTreeViewItem_Loaded);
}

private void StretchingTreeViewItem_Loaded(object sender, RoutedEventArgs e)
{
if (this.VisualChildrenCount > 0)
{
Grid grid = this.GetVisualChild(0) as Grid;
if (grid != null && grid.ColumnDefinitions.Count == 3)
{
grid.ColumnDefinitions.RemoveAt(2);
grid.ColumnDefinitions[1].Width = new GridLength(1, GridUnitType.Star);
}
}
}

protected override DependencyObject GetContainerForItemOverride()
{
return new StretchingTreeViewItem();
}

protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is StretchingTreeViewItem;
}
}

然后我覆盖 TreeView获取自定义项目。
public class StretchingTreeView : TreeView
{
protected override DependencyObject GetContainerForItemOverride()
{
return new StretchingTreeViewItem();
}

protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is StretchingTreeViewItem;
}
}

关于wpf - 如何拉伸(stretch) TreeViewItem 宽度以填充父项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47258955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com