【问题标题】:How do you highlight TreeViewItem?如何突出显示 TreeViewItem?
【发布时间】:2013-09-24 22:07:47
【问题描述】:

我有一个包含所有默认颜色的简单树视图。当您单击一个项目时,它会突出显示并且背景变为蓝色。到目前为止还好。我试图在后面的代码中做同样的事情,以便我可以将我选择的树视图项目以蓝色突出显示。我看到的唯一改变背景的属性是“.IsSelected”。但是,当我将其设置为 true 时,树视图项以白色突出显示。我不明白。我没有将突出显示颜色设置为任何内容,那么为什么它会选择与单击鼠标选择相同项目时不同的突出显示颜色? “突出显示”是与“选择”不同的属性,如果是,那么该属性的名称是什么?

谢谢。

编辑:添加代码(抱歉,这太简单了,所以我认为没有人想看到代码)

Xaml:(是的,这是整个代码。只需将其插入项目即可运行。)

 <Window x:Class="TestTreeView.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Tree View Icon"
ShowInTaskbar="false"
Name ="MyTestTreeView"
Background="Beige"
Width="500"
Height ="500"
>
<StackPanel Name="stackpanel">
    <Button Name="AddNode" Click="btnClick">
            AddNode
    </Button>

    <ScrollViewer HorizontalScrollBarVisibility="auto" VerticalScrollBarVisibility="hidden" Name="scrollViewer">
        <TreeView Name="treeView" BorderThickness="0">
            <TreeView.Resources>
                <SolidColorBrush Color="Red" x:Key="{x:Static SystemColors.HighlightBrushKey}"/>
            </TreeView.Resources>
        </TreeView>
    </ScrollViewer>
</StackPanel>

后面的代码:

using System.Windows.Shapes;
using System.IO;
namespace TestTreeView
{
    public partial class Window1 : System.Windows.Window
    {
        public Window1()
        {
            InitializeComponent();
        }       
        public void btnClick(object sender, RoutedEventArgs e)
        {
            TreeViewItem n1 = new TreeViewItem();
            n1.Header = "Top Node";
            n1.IsSelected = true;
            n1.Focus();
            treeView.Items.Add(n1);          
        }
    }
}

【问题讨论】:

  • 欢迎来到 Stackoverflow。您的问题目前看起来像一堵没有代码的文字墙。尝试通过使用适当的标点符号来改进它,并包含您遇到问题的相关代码。
  • 好的,但如果我提供整个代码,我想要一个完整的答案;) 刚刚更新了我的评论,抱歉描述很无聊。并感谢您的欢迎。

标签: c# wpf xaml


【解决方案1】:

使用 TreeViewItem 的 Focus() 方法。

【讨论】:

  • 我在上面的代码中有,但没有这样做。是否应该将焦点调用移到其他地方或应用到不同的地方?
【解决方案2】:

TreeviewItem.Focus() 方法可以解决您的问题。在您的代码中,您错过了设置 ItemContainerStyle 并且您必须在添加到 TreeView 后关注 TreeViewItem,如下所示

<Window x:Class="WpfApplication3.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <Style x:Key="myLBStyle" TargetType="{x:Type TreeViewItem}">
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green" />
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Red" />
        </Style.Resources>
    </Style>
</Window.Resources>
<Grid>
    <TreeView Name="Treeview1" ItemContainerStyle="{StaticResource myLBStyle}" />
    <Button Content="Select" Width="300" Height="30" Click="Button_Click_2" />
</Grid>

TreeViewItem n1 = new TreeViewItem();
n1.Header = "Top Node";
n1.IsSelected = true;

Treeview1.Items.Add(n1);
n1.Focus();

【讨论】:

  • 这是解决如何实际单击一个项目然后看到颜色变化,不是吗?我说的是如何在不单击鼠标的情况下突出显示后面代码中的项目。感谢您的意见。
  • 在上面的代码sn-p中,没有鼠标点击的交互。仅出于演示目的,我在按钮单击中编写了代码。按钮单击使用 Focus 方法选择项目,无需任何鼠标交互。在 XAML sn-p 中,您可以定义 2 个资源以反映选择时的颜色。
  • 您错过了在您的 sn-p 中为 Treeview 添加 ItemContainerStyle。请参考我的sn-p。它对我有用
  • 是的。但正如我上面的代码所示,n1 是新创建的 TreeViewItem,它调用 n1.Focus(),就像你的代码所暗示的那样。它什么也没做。我错过了什么。
  • 我已根据您的问题更新了我的答案。它正在工作。请采纳答案
【解决方案3】:

我相信最易于维护的方法将要求您将TreeView 上的SelectedItemSelectedValue 设置为您的ItemsSource 控件中感兴趣的项目之一。如果您使用绑定,这应该很容易做到——只需更新您的 ViewModel 上的相应属性。

如果您试图模仿用户从您的列表中选择一个项目,这就是您需要做的。如果我不正确或者您需要更多指导,请告诉我,但我们很可能首先需要您提供更多代码/示例。

【讨论】:

  • 我已经提供了上面的代码。如果更改不是太广泛,您介意用这些更改进行标记吗?
猜你喜欢
  • 2010-10-14
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-23
  • 2022-08-18
相关资源
最近更新 更多