Как изменить цвет фона TreeViewItem при нажатии в древовидной структуре WPF?

2

Я хочу изменить фон StackPanel при нажатии TextBlock.

введите описание изображения здесь

теперь фон буле! Я хочу изменить это!

<TreeView  Name="tvView" HorizontalAlignment="Left"  VerticalAlignment="Top"   BorderThickness="0">

        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Path=ChildNodes}">
                <Grid VerticalAlignment="Top" Margin="0">
                    <StackPanel Orientation="Horizontal" d:LayoutOverrides="Height">
                        <TextBlock Name="ConfidenceLevelReminderText" Text="!" FontWeight="Bold" HorizontalAlignment="Center" Foreground="#FF0000" Width="{Binding Path=ConfidenceLevelWidth}" Margin="0,0,0,0"></TextBlock>
                        <TextBlock TextWrapping="Wrap" 
                                   Padding="0,3,0,3" 
                                   Text="{Binding Path=Name}" 
                                   ToolTip="{Binding Path=NameToolTip}" 
                                   Tag="{Binding Path=TagInfo}" 
                                   MouseLeftButtonDown="name_MouseLeftButtonDown" 
                                   FontSize="14" 
                                   VerticalAlignment="Center" 
                                   HorizontalAlignment="Center" 
                                   Foreground="#FF666666" 
                                   Margin="0" 
                                   Width="{Binding Path=TextWidth}" 
                                   Cursor="Hand"/>
                        <Button x:Name="btnIngnore" Width="{Binding Path=IgnoreWidth}" Click="btn_ignore_Click" Tag="{Binding Path=NodeId}" Margin="0"  BorderThickness="0" Background="{x:Null}" Style="{StaticResource ButtonStyle32}" IsEnabled="{Binding Path=IgnoreWidth,Converter={StaticResource itb}}"  Cursor="Hand">
                            <TextBlock Text="xxxx" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0" FontSize="12" Foreground="#FF666666"/>
                        </Button>

                    </StackPanel>
                </Grid>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>
  • 0
    Прочитайте о шаблонах управления и попробуйте создать новый стиль для дерева с некоторыми триггерами. Например, если выбран «Триггер», измените цвет. Если у вас возникнут проблемы, просто дайте мне знать. wpftutorial.net/templates.html
Теги:
wpf
treeview

1 ответ

1

Если ты хочешь

изменить фон StackPanel при нажатии TextBlock.

Вы можете добавить EventSetter к стилю TextBlock и обработать событие в обработчике событий.

<TextBlock Text="...">
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <EventSetter Event="MouseDown" Handler="Mouse_LBtnDown"/>
        </Style>
    </TextBlock.Style>
</TextBlock>

private void Mouse_LBtnDown(object sender, MouseButtonEventArgs e)
{
    StackPanel stp = null;
    var visParent = VisualTreeHelper.GetParent(sender as FrameworkElement);
    while (stp == null && visParent != null)
    {
        stp = visParent as StackPanel;
        visParent = VisualTreeHelper.GetParent(visParent);
    }
    if (stp == null) { return; }

    stp.Background = Brushes.Coral;
}

Чтобы сделать его многоразовым и настраиваемым, вы можете сделать поведение из обработчика событий.

Если вы не хотите, что вы спросили, переосмыслите свой вопрос и задайте новый.

  • 0
    Я хочу, чтобы все узлы имели только одно изменение фона одновременно, что указывает на то, что он был выбран и фон предыдущего узла не исчезнет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню