首页 > 解决方案 > 选择 TreeViewItem Header 时,TextBlock 内容变得不可见

问题描述

下面包括一个简单的 WPF 应用程序的源代码,它使用TreeView. 这是运行时的样子:

在此处输入图像描述

但是请注意,如果我单击其中一个TreeViewItem标题:

在此处输入图像描述

中的文本TreeViewItem不再可见。

什么是解决此问题的好方法,以便在选择标题时文本保持可见?

如您所见,代码主要使用 C#,因此首选基于 C# 的答案,但也欢迎使用 XAML;我只是将其转换为 C#。


更新

如果我按照以下答案中的建议ForegroundTextBlockexplicitly 设置Black为:

{
    var tree_view_item = new TreeViewItem() { Header = "abc" };

    tree_view_item.Items.Add(new ScrollViewer() { Content = new TextBlock() { Text = "123", Foreground = new SolidColorBrush(Colors.Black) } });

    tree_view.Items.Add(tree_view_item);
}

它确实似乎有帮助:

在此处输入图像描述

但是,如果我然后选择TextBlock,则文本块显示为蓝底黑字,这有点尴尬:

在此处输入图像描述

有没有办法改变突出显示项目时使用的背景颜色?


MainWindow.xaml

<Window x:Class="TreeViewItemHighlightColor.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:TreeViewItemHighlightColor"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>

    </Grid>
</Window>

MainWindow.xaml.cs

using System.Windows;
using System.Windows.Controls;

namespace TreeViewItemHighlightColor
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            var tree_view = new TreeView();

            {
                var tree_view_item = new TreeViewItem() { Header = "abc" };

                tree_view_item.Items.Add(new ScrollViewer() { Content = new TextBlock() { Text = "123" } });

                tree_view.Items.Add(tree_view_item);
            }

            {
                var tree_view_item = new TreeViewItem() { Header = "bcd" };

                tree_view_item.Items.Add(new ScrollViewer() { Content = new TextBlock() { Text = "234" } });

                tree_view.Items.Add(tree_view_item);
            }

            {
                var tree_view_item = new TreeViewItem() { Header = "cde" };

                tree_view_item.Items.Add(new ScrollViewer() { Content = new TextBlock() { Text = "345" } });

                tree_view.Items.Add(tree_view_item);
            }

            Content = tree_view;
        }
    }
}

标签: wpf

解决方案


Foreground属性有可能TextBlock被 的状态继承和更改TreeViewItem

将 的Foreground属性设置TextBlock为黑色。这样,TreeViewItem 将不会覆盖它。


推荐阅读