2010-07-06 5 views
1

У меня есть следующие XML быть установлены на моей TreeView:Возникли проблемы с ItemContainerStyle на Treeview

<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 [email protected]}" /> 

     <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 [email protected]}" /> 
    </HierarchicalDataTemplate> 

    <HierarchicalDataTemplate DataType="Sibling" ItemsSource="{Binding XPath=*}"> 
     <TextBlock Text="{Binding [email protected]}" /> 
    </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 имеет темно-серая рамка, которая окружает его и вокруг его детей. Это тот эффект, которого я хочу достичь.

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

Спасибо!

+0

Также см. Http://stackoverflow.com/questions/14142510/hierarchicaldatatemplate-not-working - у него есть пример использования расширителей. – jdpilgrim

ответ

1

Это невозможно с TreeView. Вы можете использовать экспандер, хотя, смотрите здесь:

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

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

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

+0

Я очень надеюсь, что вы получите этот комментарий через 3 года. У меня такая же проблема, как и у OP, но я не знаю, как реализовать ваше предложение. Мне нужно поставить границу вокруг всех детей для определенных узлов. Можете ли вы изменить свой ответ, чтобы продемонстрировать это? –