Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf HierarchicalDataTemplate中有多个Itemplates?_Wpf_Xaml_Treeview - Fatal编程技术网

Wpf HierarchicalDataTemplate中有多个Itemplates?

Wpf HierarchicalDataTemplate中有多个Itemplates?,wpf,xaml,treeview,Wpf,Xaml,Treeview,我对XAML和WPF是完全陌生的,所以可能(希望)有一个简单的解决方案 这就是树的基本外观: ☑ MyViewModel |\u物业1 |\u物业2 ☑ MyViewModel |\u物业1 |\u物业2 下面是代码: <HierarchicalDataTemplate x:Uid="HierarchialDataTemplate2" DataType="{x:Type vm:MyViewModel}" ItemTemplate="{StaticResource Template1}"&g

我对XAML和WPF是完全陌生的,所以可能(希望)有一个简单的解决方案

这就是树的基本外观:

☑ MyViewModel
|\u物业1
|
\u物业2

☑ MyViewModel
|\u物业1
|
\u物业2

下面是代码:

<HierarchicalDataTemplate x:Uid="HierarchialDataTemplate2" DataType="{x:Type vm:MyViewModel}" ItemTemplate="{StaticResource Template1}">

     <HierarchialDataTemplate.ItemContainerStyle>
          <!-- style information -->
     </HierarchialDataTemplate.ItemContainerStyle>

     <HierarchialDataTemplate.ItemSource>
          <MultiBinding x:Uid="MultiBinding1" Converter="{StaticResource CollectionConcatinator}">
               <Binding x:Uid="Binding1" Path="Property1"/>
               <Binding x:Uid="Binding2" Path="Property2"/>
          </MultiBinding>
     </HierarchialDataTemplate.ItemSource>

     <StackPanel x:Uid="frame" x:Name="frame" Orientation="Horizontal">
          <!-- basic checkbox and name for top level of the tree node-->
     </StackPanel>

</HierarchialDataTemplate>

我只想将Template1应用于Property1,而不将任何模板应用于Property2。有办法吗

我尝试为Property1使用ContentPresenter,但我只能让它显示在树的顶层,以及复选框和名称旁边。这是我使用的ContentPresenter:

<ContentPresenter x:Uid="Property1Content" x:Name="Property1Content" Content="{Binding Property1} ContentTemplate={StaticResource Template1}"> </ContentPresenter>


如果我尝试将ContentPresenter放在StackPanel之外的任何位置,我会出错。

您可以使用Treeview的ItemTemplateSelector

public class TreeViewTemplateSelector : DataTemplateSelector
{

    private DataTemplate _Template1;
    public DataTemplate Template1
    {
        get { return _Template1; }
        set { _Template1 = value; }
    }

    private DataTemplate _Template2;
    public DataTemplate Template2
    {
        get { return _Template2; }
        set { _Template2 = value; }
    }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        return item.GetType() == typeof(property1) ? Template1 : Template2;
    }

}
放在树视图中的xaml下面

<TreeView.ItemTemplateSelector>
    <yourNamespace:TreeViewTemplateSelector Template1="{StaticResource template1}" Template2="{StaticResource template1}">
    </c:TreeViewTemplateSelector>
</TreeView.ItemTemplateSelector>