坚持使用Checkbox的TreeView的XAML代码

时间:2013-12-24 02:07:16

标签: c# xaml treeview

我有几个在代码级别填充的树视图。 我想用最少的代码对它们应用复选框。

我可以看到用于填充树视图的复选框和项目名称没有问题,但树视图没有扩展。

这是资源字典。我可以看到正在实施所有设置

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:col="clr-namespace:System.Collections;assembly=mscorlib" 
                xmlns:Primitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Layout.Toolkit"
                xmlns:ToolKit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Layout.Toolkit" 
                x:Name="MainDefaultStyle"
                >

<Style TargetType="TreeView">
    <Setter Property="Background" Value="White"/>
    <Setter Property="Height" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}, Path=ActualHeight}" />
    <Setter Property="Width" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}, Path=ActualWidth}" />
</Style>
<Style TargetType="TreeViewItem" x:Name="TreeViewItem">
    <Style.Resources>
        <SolidColorBrush Color="AliceBlue" x:Key="{x:Static SystemColors.HighlightBrushKey}"/>
        <SolidColorBrush Color="Black" x:Key="{x:Static SystemColors.HighlightTextBrush}"/>
    </Style.Resources>
    <Setter Property="Background" Value="White" />
    <Setter Property="VerticalAlignment" Value="Stretch"/>
    <Setter Property="VerticalContentAlignment" Value="Stretch"/>
    <Setter Property="HorizontalAlignment" Value="Stretch"/>
    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    <Setter Property="Height" Value="{Binding BindsDirectlyToSource=True}"/>
    <Setter Property="Width" Value="{Binding BindsDirectlyToSource=True}"/>

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TreeViewItem" >


                <StackPanel>
                    <CheckBox 
                        x:Name="CheckBox1" 
                        Focusable="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TreeViewItem}}, Path=IsSelected}" 
                        Grid.Column="0"

                        >
                            <TextBlock 
                                Margin="1" 
                                Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}},  Path=Header}" 
                                Focusable="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TreeViewItem}}, Path=IsSelected}"
                                Foreground="Black" 
                                Grid.Column="1" 
                                Background="AliceBlue">
                            </TextBlock>
                    </CheckBox>
               </StackPanel>

            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
 </ResourceDictionary>

这是MainWindow中的代码

                <TreeView Name="TreeComputers" BorderBrush="Transparent" >
                    <TreeViewItem Header="This is a test" >
                        <TreeViewItem Header="Another test"></TreeViewItem>
                        </TreeViewItem>
                </TreeView>

我的树视图触发器在代码中创建。

        TreeComputers.SelectedItemChanged += new RoutedPropertyChangedEventHandler<object>(TreeView_SelectionChanged);
        TreeUsers.SelectedItemChanged += new RoutedPropertyChangedEventHandler<object>(TreeView_SelectionChanged);

我需要能够单击树视图中现在有复选框的项目并触发路由命令..

任何想法?

1 个答案:

答案 0 :(得分:0)

您的问题是,您无法再展开树中的项目以查看子项吗?

我认为您的问题是您要将TreeView.ItemTemplate设为HierarchicalDataTemplate

类似的东西:

<Setter Property="ItemTemplate">
    <Setter.Value>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <StackPanel>
                <CheckBox 
                    x:Name="CheckBox1" 
                    Focusable="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TreeViewItem}}, Path=IsSelected}" 
                    Grid.Column="0">
                        <TextBlock 
                            Margin="1" 
                            Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}},  Path=Header}" 
                            Focusable="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TreeViewItem}}, Path=IsSelected}"
                            Foreground="Black" 
                            Grid.Column="1" 
                            Background="AliceBlue">
                        </TextBlock>
                </CheckBox>
           </StackPanel>
        </HierarchicalDataTemplate >
    </Setter.Value>
</Setter>