CheckBox в TreeView

WPF
  1. 6 года назад

    Добрый день! В своем проекте я использую тему DarkOrange. В TreeView я добавил чекбоксы, но щёлкнуть мышью по ним не получается, никакой реакции. При отключении темы всё хорошо. Как исправить ситуацию?

  2. Alexandr_Erohin

    Sep 3 Администратор

    Приведите код пожалуйста

  3. Вот создаю темплэйт для TreeView

    <HierarchicalDataTemplate DataType="{x:Type local:Node}" ItemsSource="{Binding Children}">
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding IsChecked}" Uid="{Binding Id}" PreviewMouseLeftButtonDown="OnMouseLeftButtonDown"/>
                    <TextBlock Text="{Binding Text}"/>
                </StackPanel>
            </HierarchicalDataTemplate>

    Дерево заполняется динамически в коде наподобие:

    Node node = new Node();
                        node.Id = row["Id"].ToString();
                        node.Text = row["Name"].ToString();
                        tv.Items.Add(node);

    Node - это свой класс.

  4. Alexandr_Erohin

    Sep 3 Администратор
    Добавлено 6 года назад Alexandr_Erohin

    Да нашел баг - в самом шаблоне TreeViewItem. Откройте файл куда скинули темы (в демо это Core.xaml), найдите через поиск шаблон "TreeViewItem" и в самом шаблоне поместите элемент ContentPresenter ниже элемента Border с x:Name="selected_hover":

    было:

    <ContentPresenter x:Name="PART_Header" HorizontalAlignment="Stretch" ContentSource="Header" Margin="5,4"></ContentPresenter>
    <Border x:Name="selected_hover" Opacity="0" Background="{StaticResource ControlBackgroundLine}" BorderBrush="{x:Null}" BorderThickness="1" CornerRadius="2"></Border>
                                    

    а нужно:

    <Border x:Name="selected_hover" Opacity="0" Background="{StaticResource ControlBackgroundLine}" BorderBrush="{x:Null}" BorderThickness="1" CornerRadius="2"></Border>
    <ContentPresenter x:Name="PART_Header" HorizontalAlignment="Stretch" ContentSource="Header" Margin="5,4"></ContentPresenter>

    Или можете немного подождать, сейчас перезалью на сайт исправленную тему

  5. Спасибо, сделал как вы сказали, помогло!

  6. Теперь по дереву нельзя перемещаться с помощью стрелок..

  7. Alexandr_Erohin

    Sep 4 Администратор

    Ну так и в стандартном элементе TreeView вы не сможете перемещаться с помощью стрелок, если используете элементы CheckBox внутри. Как вариант можно привязать свойство IsChecked к свойству IsSelected элемента TreeViewItem, по крайней мере будет работать подсветка выбранного элемента CheckBox, хотя перемещаться все равно будет нельзя.

  8. Спасибо, попробую что-нибудь придумать!

или зарегистрируйтесь чтобы ответить