选择TreeViewItem标头时,TextBlock内容不可见

时间:2019-04-27 07:24:56

标签: wpf

下面包括的是使用TreeView的简单WPF应用程序的源代码。运行时的外观如下:

enter image description here

但是请注意,如果我单击TreeViewItem标头之一:

enter image description here

TreeViewItem中的文本不再可见。

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

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


更新

如果我按照以下答案中的建议将Foreground中的TextBlock临时设置为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);
}

它确实确实有帮助:

enter image description here

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

enter image description here

是否有一种方法还可以更改突出显示项目时使用的背景颜色?


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;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

Foreground的{​​{1}}属性有可能被TextBlock的状态继承和更改。

TreeViewItem的{​​{1}}属性设置为黑色。这样,TreeViewItem将不会覆盖它。