我正在尝试将项目的内容包裹在 Treeview
上没有水平滚动条还没有找到最佳解决方案。
这是我正在使用的示例代码片段
<TreeView ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<TreeViewItem IsExpanded="True">
<TreeViewItem.Header>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding RelativeSource={RelativeSource AncestorType=TreeView}, Path=ActualWidth}"/>
</Grid.ColumnDefinitions>
<TextBlock TextWrapping="Wrap" Text="Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here " />
</Grid>
</TreeViewItem.Header>
<TreeViewItem>
<TreeViewItem.Header>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding RelativeSource={RelativeSource AncestorType=TreeView}, Path=ActualWidth}"/>
</Grid.ColumnDefinitions>
<TextBlock TextWrapping="Wrap" Text="Level 2.1 Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here " Foreground="Blue" />
</Grid>
</TreeViewItem.Header>
</TreeViewItem>
</TreeViewItem>
</TreeView>
输出是
您可以看到内容超出了 View 。我知道这是因为我们正在设置 Treeview
宽度和TreeviewItem
有一些缩进,但我怎样才能得到最佳的 width
对于 TreeviewItem
?
已经尝试过以下链接,但没有任何运气。
最佳答案
每个 TreeViewItem
的最小缩进约为 19 DIP - 这是默认 ControlTemplate
中的硬编码值 - 因此您可以按此值增加右边距 +每个级别的一些偏移量:
<TreeView ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<TreeViewItem IsExpanded="True">
<TreeViewItem.Header>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding RelativeSource={RelativeSource AncestorType=TreeView}, Path=ActualWidth}"/>
</Grid.ColumnDefinitions>
<TextBlock TextWrapping="Wrap" Text="Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here "
Margin="0 0 25 0"/>
</Grid>
</TreeViewItem.Header>
<TreeViewItem>
<TreeViewItem.Header>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding RelativeSource={RelativeSource AncestorType=TreeView}, Path=ActualWidth}"/>
</Grid.ColumnDefinitions>
<TextBlock TextWrapping="Wrap" Text="Level 2.1 Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here Level 1 (Blue) Some long text over here " Foreground="Blue"
Margin="0 0 50 0"/>
</Grid>
</TreeViewItem.Header>
</TreeViewItem>
</TreeViewItem>
</TreeView>
如果您希望能够动态执行此操作,您可以在 HierarchicalDataTemplate
中处理 TextBlock
的 Loaded
事件并计算Margin
基于 TreeViewItem
容器的级别。像这样的事情:
<TreeView ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:YourType}" ItemsSource="{Binding Children}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding RelativeSource={RelativeSource AncestorType=TreeView}, Path=ActualWidth}"/>
</Grid.ColumnDefinitions>
<TextBlock TextWrapping="Wrap" Text="{Binding Header}" Foreground="Blue"
Loaded="TextBlock_Loaded" />
</Grid>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
private void TextBlock_Loaded(object sender, RoutedEventArgs e)
{
TextBlock textBlock = sender as TextBlock;
TreeViewItem tvi = FindParent<TreeViewItem>(textBlock);
ItemsControl parent = ItemsControl.ItemsControlFromItemContainer(tvi);
int index = 1;
while (parent != null && parent.GetType() == typeof(TreeViewItem))
{
index++;
parent = ItemsControl.ItemsControlFromItemContainer(parent);
}
textBlock.Margin = new Thickness(0, 0, 25 * index, 0);
}
关于c# - 在 Treeview 中包裹 TreeviewItem 的 TextBlock 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44647072/