在wpf访问堆栈面板中从树视图中的嵌套节点

时间:2016-04-08 19:07:32

标签: c# wpf

我希望在每个节点的循环中能够在节点访问时更改堆栈面板中的背景,并在它离开后再次将背景设置为透明。

我的问题:我不知道如何访问Stack Panel以从后面的代码更改BackGround。 我将不胜感激任何帮助

这是我的代码: TreeView控件

<TreeView Grid.Column="1" Grid.Row="0" ItemsSource="{Binding ListOfNodes}"
                                                    Background="Linen" Margin="0,0,0,-0">
    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="IsExpanded" Value="True"/>
        </Style>
    </TreeView.ItemContainerStyle>
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate x:Name="HDT_node" DataType="Node" ItemsSource="{Binding Children}">
            <StackPanel Orientation="Horizontal"
                                    MouseLeftButtonDown="btnTreeItemStartPlay"
                                    Background="Transparent">
                <Image Source="{Binding Path=image.Source}" Width="30" Height="30"
                                HorizontalAlignment="Left"
                                     MouseEnter="ZoomStart" MouseLeave="ZoomStop" />
            </StackPanel>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

班级节点:

public class Node
{
    public Image image { get; set; }

    public List<Node> Children { get; set; }

    public Node()
    {
    }

    public Node(Image imageIn, int orderIndexIn)
    {
        image = imageIn;
        Children = new List<Node>();
    }
}

1 个答案:

答案 0 :(得分:1)

StackPanel内无法直接访问DataTemplate。但是,您仍然可以使用VisualTreeHelper在运行时迭代可视树并执行您想要执行的任何操作。

在此之前使用WPF Visual Tree Visualizer来熟悉您拥有的Visual Tree。然后从TreeView开始并迭代孩子以获得所需的孩子。根据您的模板,可视树会有所不同。