0

我有一个包含所有默认颜色的简单树视图。当您单击一个项目时,它会突出显示并且背景变为蓝色。到目前为止还好。我正在尝试在后面的代码中做同样的事情,以便我可以将我选择的树视图项目以蓝色突出显示。我看到的唯一改变背景的属性是“.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);          
        }
    }
}
4

3 回答 3

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();
于 2013-09-19T17:47:55.857 回答
0

使用 TreeViewItem 的 Focus() 方法。

于 2013-09-19T17:31:08.513 回答
0

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

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

于 2013-09-19T17:51:34.343 回答