你如何突出TreeViewItem?

时间:2013-09-19 17:22:26

标签: c# wpf xaml

我有一个简单的树视图,包含所有默认颜色。单击某个项目时,它会突出显示,背景变为蓝色。好到目前为止。我正在尝试在后面的代码中执行相同的操作,以便我可以将我选择的树视图项目以蓝色突出显示。我看到的唯一属性,我发现更改背景是“.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);          
        }
    }
}

3 个答案:

答案 0 :(得分:1)

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();

答案 1 :(得分:0)

使用TreeViewItem的Focus()方法。

答案 2 :(得分:0)

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

如果您尝试模仿用户从列表中选择项目,则需要执行此操作。如果我不正确或者您需要更多指导,请告诉我,但我们首先需要您提供更多代码/示例。