Отключить выбранный цвет по умолчанию

#c# #wpf #xaml #treeview

#c# #wpf #xaml #просмотр дерева

Вопрос:

Когда я нажимаю на элемент TreeViewItem, вызывается itemClicked() .

C#:

     public void ItemClicked(object sender, RoutedEventArgs e)
    {
        if (sender is TreeViewItem ClickedNode)
        {
            if (ClickedNode.HasItems) // Its a parent node
            {
                if (CtrlPressed)
                {
                    var SelectedChild = TreeView.SelectedItem as TreeViewItem; // Have to do this manually since the sender is parent???
                    SelectedChild.Background = Brushes.Black;
                    SelectedChild.Foreground = Brushes.White;
                }
            }
        }
  

В моем XAML я отключил выбранные цвета по умолчанию:

 <Grid>

    <TreeView Name="TreeView">
        <TreeView.ItemContainerStyle>
            <Style TargetType="{x:Type TreeViewItem}">
                <EventSetter Event="MouseLeftButtonUp"
                             Handler="ItemClicked"/>
            </Style>
        </TreeView.ItemContainerStyle>
        <TreeView.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
                  Color="Transparent" />
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}"
                  Color="Black" />
            <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}"
                  Color="Transparent" />
            <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}"
                  Color="Black" />
        </TreeView.Resources>

    </TreeView>

</Grid>
  

Итак, теперь, когда я нажимаю на узел, он будет отображаться не черным, а полностью белым. Таким образом, прозрачный, похоже, переопределяет только что установленные кисти.Черный. Кажется, что цвет переднего плана проходит.

Первый вопрос: отправителем является не фактический выбранный узел, а его родительский узел. Почему это так? Я должен выяснить, является ли это родительским узлом вручную, а затем получить.SelectedItem тоже вручную. Как мне это исправить?

Второй вопрос: как мне исправить переопределение цветов? Я вообще ничего не хочу, когда IsSelected имеет значение true…

Комментарии:

1. Является ли дочерний элемент TreeViewItem или TreeViewNode? Ваш код таков: отправителем является TreeViewItem ClickedNode

2. Все в mit TreeView является TreeViewItem. Я даже не знал, что существуют разные объекты..

3. Вы должны задавать только один вопрос за раз. Какой пост вы выберете, если кто-то может ответить на один вопрос, но не на другой?

4. Первый вопрос: дочерние элементы treeviewitems находятся внутри их родительского элемента. Элемент treeviewitem — это элемент управления заголовками itemscontrol. Взгляните на e.OriginalSource .