Как расширить связанные и стилизованные узлы TreeViewItem - PullRequest
0 голосов
/ 15 октября 2010

У меня есть TreeView в WPF, который я связал с коллекцией категорий, которая сама содержит коллекцию категорий и сын и так далее. В настоящее время я успешно связываю коллекцию и показываю имена всех категорий. Тем не менее, у меня также есть свойство IsExpanded в моих объектах коллекции, которое, когда все установлено в true, расширяет только первый TreeViewItem, но не последующие.

Кто-нибудь знает, что может быть не так с моими стилями TreeView?

<HierarchicalDataTemplate x:Key="menuHierarchicalTemplate" ItemsSource="{Binding Path=SubCategories, Mode=TwoWay}" >          
        <Border x:Name="treeViewItemBorder"
                CornerRadius="3"
                MinWidth="125" 
                BorderBrush="Silver" Background="Transparent">
                <StackPanel Orientation="Horizontal" >
                    <TextBlock Height="24" Padding="5" Text="{Binding Path=Name}" />
                </StackPanel>
            </Border>
</HierarchicalDataTemplate>

<Style x:Key="treeViewItemStyle" TargetType="TreeViewItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TreeViewItem">
                    <TreeViewItem IsExpanded="{Binding Path=IsExpanded, Mode=TwoWay}"
                                  ItemsSource="{Binding Path=SubCategories}"
                                  ItemTemplate="{StaticResource menuHierarchicalTemplate}" >                              
                        <TreeViewItem.Header>                                
                            <StackPanel Orientation="Horizontal" >
                                <TextBlock Height="24" FontSize="12" Padding="5" Text="{Binding Path=Name}" />
                            </StackPanel>                                
                        </TreeViewItem.Header>                            
                    </TreeViewItem>                        
                </ControlTemplate>
            </Setter.Value>
        </Setter>
</Style>

<TreeView Name="menuTreeView"
                Background="Transparent"
                BorderBrush="Transparent"
                VerticalAlignment="Stretch"
                HorizontalAlignment="Stretch"
                Margin="10"   
                ItemContainerStyle="{StaticResource treeViewItemStyle}">                
</TreeView>

Спасибо

Xam

1 Ответ

1 голос
/ 15 октября 2010

Вы применяете «treeViewItemStyle» только к первому уровню элементов в TreeView. Вы должны установить это так же как ItemContainerStyle TreeViewItems. Итак, в вашем ControlTemplate вам понадобится что-то вроде:

<ControlTemplate TargetType="TreeViewItem">
  <TreeViewItem ItemContainerStyle="{StaticResource treeViewItemStyle}".../>
</ControlTemplate>

Еще лучше, вы можете просто удалить атрибут "x: Key" в вашем объявлении стиля. При этом стиль автоматически будет применен к all TreeViewItems.

ПОБОЧНОЕ ПРИМЕЧАНИЕ:

Я бы предложил, чтобы вместо переопределения ControlTemplate, как вы делали выше, просто используйте вместо этого свойство Setters в Style. Что-то вроде:

<Style TargetType="TreeViewItem">
    <Setter Property="IsExpanded" Value="{Binding Path=IsExpanded, Mode=TwoWay}"/>
    <Setter Property="ItemsSource" Value="{Binding Path=SubCategories}"/>
    <Setter Property="ItemTemplate" Value="{StaticResource menuHierarchicalTemplate}"/>
    <Setter Property="Header">
        <Setter.Value>
            <StackPanel Orientation="Horizontal" >
                <TextBlock Height="24" FontSize="12" Padding="5" Text="{Binding Path=Name}" />
            </StackPanel>
        </Setter.Value>
    </Setter>
</Style>

Довольно необычно использовать один и тот же элемент управления как часть самого шаблона ControlTemplate (т. Е. Используя TreeViewItem в шаблоне ControlT TreeViewItem).

...