Возникли проблемы с ItemContainerStyle на TreeView - PullRequest
1 голос
/ 06 июля 2010

У меня есть следующий XML, установленный на моем дереве:

<Root Value="YES">
 <Child Name="Test">
 <Sibling Data="Yes">
  <Last UserData="1"/>
 </Sibling>
 <Sibling Data="No"/>
 </Child>
 <Child Name="Test2"/>
</Root>

, а затем я установил следующий код в моем окне:

<Window.Resources>
    <XmlDataProvider x:Key="dataProvider" XPath="Root" Source="C:\XML.xml" />

    <HierarchicalDataTemplate DataType="Root" ItemsSource="{Binding XPath=*}">
      <TextBlock Text="{Binding XPath=@Value}" />

      <HierarchicalDataTemplate.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate>
                <Border Background="Blue">
                  <ContentPresenter/>
                </Border>
              </ControlTemplate>
            </Setter.Value>
          </Setter>
        </Style>
      </HierarchicalDataTemplate.ItemContainerStyle>
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate DataType="Child" ItemsSource="{Binding XPath=*}">
      <TextBlock Text="{Binding XPath=@Name}" />
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate DataType="Sibling" ItemsSource="{Binding XPath=*}">
      <TextBlock Text="{Binding XPath=@Data}" />
    </HierarchicalDataTemplate>
  </Window.Resources>

  <Grid>
    <TreeView Margin="12" x:Name="trv"
         ItemsSource="{Binding Source={StaticResource dataProvider}}" />
  </Grid>

Я хотел бы получитьпограничный контроль охватывает все подэлементы для каждого узла, как на этом изображении:

http://www.hardcodet.net/uploads/2008/03/tree-dialogik.png

Другими словами, вы заметите на изображении, с которым я связан, родительский узел dialogik.Memory имеет темно-серую рамку, которая проходит вокруг нее и вокруг ее дочерних элементов.Это тот эффект, которого я хочу достичь.

Что мне нужно изменить в моем коде, чтобы он работал правильно ???

Спасибо !!

1 Ответ

1 голос
/ 07 июля 2010

Это невозможно с TreeView.Вы можете использовать Expander, см. Здесь:

http://msdn.microsoft.com/en-us/library/system.windows.controls.expander.aspx

.. и затем связать его аналогично: у вас будет ItemsControl, который выводит Expander длякаждый элемент, а затем Expander будет содержать еще один ItemsControl для дочерних элементов, рекурсивно.

Надеюсь, это поможет!

...