Wpf 具有各种类型控件的列表框模板

Wpf 具有各种类型控件的列表框模板,wpf,xaml,Wpf,Xaml,我正在尝试修改现有的WPF win应用程序,以便代表过滤器的复选框列表有时还包括一个滑块控件子节点。现在是复选框 <!-- hasChildrenTemplate --> <HierarchicalDataTemplate x:Key="HasChildren" ItemsSource="{Binding Children}"> <TextBlock Text="{Bin

我正在尝试修改现有的WPF win应用程序,以便代表过滤器的复选框列表有时还包括一个滑块控件子节点。现在是复选框

    <!-- hasChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="HasChildren" 
                              ItemsSource="{Binding Children}">

        <TextBlock Text="{Binding Name}" 
                   />

        <HierarchicalDataTemplate.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>

    </HierarchicalDataTemplate>

    <!-- noChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="NoChildren">
        <StackPanel Orientation="Horizontal">
            <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
            <TextBlock Text="{Binding Name}" />
        </StackPanel>
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate x:Key="Slider">
        <StackPanel Orientation="Horizontal">
            <!--<TextBlock Text="{Binding Name}" />-->

            <Slider Width="100"
                    HorizontalAlignment="Right"
                TickPlacement="BottomRight"
                Value="{Binding Value}"
                Minimum="{Binding Min}"
                Maximum="{Binding Max}"/>
        </StackPanel>
    </HierarchicalDataTemplate>

    <!-- template selector for location filter list -->
    <local:FilterTemplateSelector x:Key="FilterTemplateSelector"
                                    HasChildren="{StaticResource HasChildren}"
                                    Slider="{StaticResource Slider}"
                                    NoChildren="{StaticResource NoChildren}" 
                                    Dma="{StaticResource Other}"/>

    <!-- location filter template  -->
    <HierarchicalDataTemplate x:Key="filterTemplate"
                              ItemsSource="{Binding Children}"
                              ItemTemplateSelector="{StaticResource FilterTemplateSelector}">

        <TextBlock Text="{Binding Name}" 
                   />
    </HierarchicalDataTemplate>




</DockPanel.Resources>

<TreeView x:Name="uiFilterTreeView" 
                  Width="250"
                  ItemsSource="{Binding Path=Filters}"
                  BorderThickness="1,1,1,0"
                  ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                  ItemTemplate="{StaticResource filterTemplate }"/>
这就是我想要的。目前,它看起来就像这样,但没有滑块

    <!-- hasChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="HasChildren" 
                              ItemsSource="{Binding Children}">

        <TextBlock Text="{Binding Name}" 
                   />

        <HierarchicalDataTemplate.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>

    </HierarchicalDataTemplate>

    <!-- noChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="NoChildren">
        <StackPanel Orientation="Horizontal">
            <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
            <TextBlock Text="{Binding Name}" />
        </StackPanel>
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate x:Key="Slider">
        <StackPanel Orientation="Horizontal">
            <!--<TextBlock Text="{Binding Name}" />-->

            <Slider Width="100"
                    HorizontalAlignment="Right"
                TickPlacement="BottomRight"
                Value="{Binding Value}"
                Minimum="{Binding Min}"
                Maximum="{Binding Max}"/>
        </StackPanel>
    </HierarchicalDataTemplate>

    <!-- template selector for location filter list -->
    <local:FilterTemplateSelector x:Key="FilterTemplateSelector"
                                    HasChildren="{StaticResource HasChildren}"
                                    Slider="{StaticResource Slider}"
                                    NoChildren="{StaticResource NoChildren}" 
                                    Dma="{StaticResource Other}"/>

    <!-- location filter template  -->
    <HierarchicalDataTemplate x:Key="filterTemplate"
                              ItemsSource="{Binding Children}"
                              ItemTemplateSelector="{StaticResource FilterTemplateSelector}">

        <TextBlock Text="{Binding Name}" 
                   />
    </HierarchicalDataTemplate>




</DockPanel.Resources>

<TreeView x:Name="uiFilterTreeView" 
                  Width="250"
                  ItemsSource="{Binding Path=Filters}"
                  BorderThickness="1,1,1,0"
                  ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                  ItemTemplate="{StaticResource filterTemplate }"/>
(更新看起来更清晰)

    <!-- hasChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="HasChildren" 
                              ItemsSource="{Binding Children}">

        <TextBlock Text="{Binding Name}" 
                   />

        <HierarchicalDataTemplate.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>

    </HierarchicalDataTemplate>

    <!-- noChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="NoChildren">
        <StackPanel Orientation="Horizontal">
            <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
            <TextBlock Text="{Binding Name}" />
        </StackPanel>
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate x:Key="Slider">
        <StackPanel Orientation="Horizontal">
            <!--<TextBlock Text="{Binding Name}" />-->

            <Slider Width="100"
                    HorizontalAlignment="Right"
                TickPlacement="BottomRight"
                Value="{Binding Value}"
                Minimum="{Binding Min}"
                Maximum="{Binding Max}"/>
        </StackPanel>
    </HierarchicalDataTemplate>

    <!-- template selector for location filter list -->
    <local:FilterTemplateSelector x:Key="FilterTemplateSelector"
                                    HasChildren="{StaticResource HasChildren}"
                                    Slider="{StaticResource Slider}"
                                    NoChildren="{StaticResource NoChildren}" 
                                    Dma="{StaticResource Other}"/>

    <!-- location filter template  -->
    <HierarchicalDataTemplate x:Key="filterTemplate"
                              ItemsSource="{Binding Children}"
                              ItemTemplateSelector="{StaticResource FilterTemplateSelector}">

        <TextBlock Text="{Binding Name}" 
                   />
    </HierarchicalDataTemplate>




</DockPanel.Resources>

<TreeView x:Name="uiFilterTreeView" 
                  Width="250"
                  ItemsSource="{Binding Path=Filters}"
                  BorderThickness="1,1,1,0"
                  ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                  ItemTemplate="{StaticResource filterTemplate }"/>
基本列表是一个可观察的集合。它目前只有一个List Children属性,该属性与模板选择器绑定以获得不同的深度

    <!-- hasChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="HasChildren" 
                              ItemsSource="{Binding Children}">

        <TextBlock Text="{Binding Name}" 
                   />

        <HierarchicalDataTemplate.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>

    </HierarchicalDataTemplate>

    <!-- noChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="NoChildren">
        <StackPanel Orientation="Horizontal">
            <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
            <TextBlock Text="{Binding Name}" />
        </StackPanel>
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate x:Key="Slider">
        <StackPanel Orientation="Horizontal">
            <!--<TextBlock Text="{Binding Name}" />-->

            <Slider Width="100"
                    HorizontalAlignment="Right"
                TickPlacement="BottomRight"
                Value="{Binding Value}"
                Minimum="{Binding Min}"
                Maximum="{Binding Max}"/>
        </StackPanel>
    </HierarchicalDataTemplate>

    <!-- template selector for location filter list -->
    <local:FilterTemplateSelector x:Key="FilterTemplateSelector"
                                    HasChildren="{StaticResource HasChildren}"
                                    Slider="{StaticResource Slider}"
                                    NoChildren="{StaticResource NoChildren}" 
                                    Dma="{StaticResource Other}"/>

    <!-- location filter template  -->
    <HierarchicalDataTemplate x:Key="filterTemplate"
                              ItemsSource="{Binding Children}"
                              ItemTemplateSelector="{StaticResource FilterTemplateSelector}">

        <TextBlock Text="{Binding Name}" 
                   />
    </HierarchicalDataTemplate>




</DockPanel.Resources>

<TreeView x:Name="uiFilterTreeView" 
                  Width="250"
                  ItemsSource="{Binding Path=Filters}"
                  BorderThickness="1,1,1,0"
                  ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                  ItemTemplate="{StaticResource filterTemplate }"/>
我想我必须让列表框更直接地绑定到过滤器对象,而不是过滤器子列表

    <!-- hasChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="HasChildren" 
                              ItemsSource="{Binding Children}">

        <TextBlock Text="{Binding Name}" 
                   />

        <HierarchicalDataTemplate.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>

    </HierarchicalDataTemplate>

    <!-- noChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="NoChildren">
        <StackPanel Orientation="Horizontal">
            <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
            <TextBlock Text="{Binding Name}" />
        </StackPanel>
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate x:Key="Slider">
        <StackPanel Orientation="Horizontal">
            <!--<TextBlock Text="{Binding Name}" />-->

            <Slider Width="100"
                    HorizontalAlignment="Right"
                TickPlacement="BottomRight"
                Value="{Binding Value}"
                Minimum="{Binding Min}"
                Maximum="{Binding Max}"/>
        </StackPanel>
    </HierarchicalDataTemplate>

    <!-- template selector for location filter list -->
    <local:FilterTemplateSelector x:Key="FilterTemplateSelector"
                                    HasChildren="{StaticResource HasChildren}"
                                    Slider="{StaticResource Slider}"
                                    NoChildren="{StaticResource NoChildren}" 
                                    Dma="{StaticResource Other}"/>

    <!-- location filter template  -->
    <HierarchicalDataTemplate x:Key="filterTemplate"
                              ItemsSource="{Binding Children}"
                              ItemTemplateSelector="{StaticResource FilterTemplateSelector}">

        <TextBlock Text="{Binding Name}" 
                   />
    </HierarchicalDataTemplate>




</DockPanel.Resources>

<TreeView x:Name="uiFilterTreeView" 
                  Width="250"
                  ItemsSource="{Binding Path=Filters}"
                  BorderThickness="1,1,1,0"
                  ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                  ItemTemplate="{StaticResource filterTemplate }"/>
新的各种过滤器对象可能有也可能没有列表或其他属性来驱动滑块

    <!-- hasChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="HasChildren" 
                              ItemsSource="{Binding Children}">

        <TextBlock Text="{Binding Name}" 
                   />

        <HierarchicalDataTemplate.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>

    </HierarchicalDataTemplate>

    <!-- noChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="NoChildren">
        <StackPanel Orientation="Horizontal">
            <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
            <TextBlock Text="{Binding Name}" />
        </StackPanel>
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate x:Key="Slider">
        <StackPanel Orientation="Horizontal">
            <!--<TextBlock Text="{Binding Name}" />-->

            <Slider Width="100"
                    HorizontalAlignment="Right"
                TickPlacement="BottomRight"
                Value="{Binding Value}"
                Minimum="{Binding Min}"
                Maximum="{Binding Max}"/>
        </StackPanel>
    </HierarchicalDataTemplate>

    <!-- template selector for location filter list -->
    <local:FilterTemplateSelector x:Key="FilterTemplateSelector"
                                    HasChildren="{StaticResource HasChildren}"
                                    Slider="{StaticResource Slider}"
                                    NoChildren="{StaticResource NoChildren}" 
                                    Dma="{StaticResource Other}"/>

    <!-- location filter template  -->
    <HierarchicalDataTemplate x:Key="filterTemplate"
                              ItemsSource="{Binding Children}"
                              ItemTemplateSelector="{StaticResource FilterTemplateSelector}">

        <TextBlock Text="{Binding Name}" 
                   />
    </HierarchicalDataTemplate>




</DockPanel.Resources>

<TreeView x:Name="uiFilterTreeView" 
                  Width="250"
                  ItemsSource="{Binding Path=Filters}"
                  BorderThickness="1,1,1,0"
                  ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                  ItemTemplate="{StaticResource filterTemplate }"/>
有一个c#模板选择器,但它在子列表而不是过滤器列表上操作。它可以得到子节点的不同深度

    <!-- hasChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="HasChildren" 
                              ItemsSource="{Binding Children}">

        <TextBlock Text="{Binding Name}" 
                   />

        <HierarchicalDataTemplate.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>

    </HierarchicalDataTemplate>

    <!-- noChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="NoChildren">
        <StackPanel Orientation="Horizontal">
            <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
            <TextBlock Text="{Binding Name}" />
        </StackPanel>
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate x:Key="Slider">
        <StackPanel Orientation="Horizontal">
            <!--<TextBlock Text="{Binding Name}" />-->

            <Slider Width="100"
                    HorizontalAlignment="Right"
                TickPlacement="BottomRight"
                Value="{Binding Value}"
                Minimum="{Binding Min}"
                Maximum="{Binding Max}"/>
        </StackPanel>
    </HierarchicalDataTemplate>

    <!-- template selector for location filter list -->
    <local:FilterTemplateSelector x:Key="FilterTemplateSelector"
                                    HasChildren="{StaticResource HasChildren}"
                                    Slider="{StaticResource Slider}"
                                    NoChildren="{StaticResource NoChildren}" 
                                    Dma="{StaticResource Other}"/>

    <!-- location filter template  -->
    <HierarchicalDataTemplate x:Key="filterTemplate"
                              ItemsSource="{Binding Children}"
                              ItemTemplateSelector="{StaticResource FilterTemplateSelector}">

        <TextBlock Text="{Binding Name}" 
                   />
    </HierarchicalDataTemplate>




</DockPanel.Resources>

<TreeView x:Name="uiFilterTreeView" 
                  Width="250"
                  ItemsSource="{Binding Path=Filters}"
                  BorderThickness="1,1,1,0"
                  ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                  ItemTemplate="{StaticResource filterTemplate }"/>
我可以根据需要更改集合和对象

    <!-- hasChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="HasChildren" 
                              ItemsSource="{Binding Children}">

        <TextBlock Text="{Binding Name}" 
                   />

        <HierarchicalDataTemplate.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>

    </HierarchicalDataTemplate>

    <!-- noChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="NoChildren">
        <StackPanel Orientation="Horizontal">
            <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
            <TextBlock Text="{Binding Name}" />
        </StackPanel>
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate x:Key="Slider">
        <StackPanel Orientation="Horizontal">
            <!--<TextBlock Text="{Binding Name}" />-->

            <Slider Width="100"
                    HorizontalAlignment="Right"
                TickPlacement="BottomRight"
                Value="{Binding Value}"
                Minimum="{Binding Min}"
                Maximum="{Binding Max}"/>
        </StackPanel>
    </HierarchicalDataTemplate>

    <!-- template selector for location filter list -->
    <local:FilterTemplateSelector x:Key="FilterTemplateSelector"
                                    HasChildren="{StaticResource HasChildren}"
                                    Slider="{StaticResource Slider}"
                                    NoChildren="{StaticResource NoChildren}" 
                                    Dma="{StaticResource Other}"/>

    <!-- location filter template  -->
    <HierarchicalDataTemplate x:Key="filterTemplate"
                              ItemsSource="{Binding Children}"
                              ItemTemplateSelector="{StaticResource FilterTemplateSelector}">

        <TextBlock Text="{Binding Name}" 
                   />
    </HierarchicalDataTemplate>




</DockPanel.Resources>

<TreeView x:Name="uiFilterTreeView" 
                  Width="250"
                  ItemsSource="{Binding Path=Filters}"
                  BorderThickness="1,1,1,0"
                  ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                  ItemTemplate="{StaticResource filterTemplate }"/>
有什么建议吗?我在js和html中做过这类事情,但我不喜欢WPF和xmal

    <!-- hasChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="HasChildren" 
                              ItemsSource="{Binding Children}">

        <TextBlock Text="{Binding Name}" 
                   />

        <HierarchicalDataTemplate.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>

    </HierarchicalDataTemplate>

    <!-- noChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="NoChildren">
        <StackPanel Orientation="Horizontal">
            <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
            <TextBlock Text="{Binding Name}" />
        </StackPanel>
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate x:Key="Slider">
        <StackPanel Orientation="Horizontal">
            <!--<TextBlock Text="{Binding Name}" />-->

            <Slider Width="100"
                    HorizontalAlignment="Right"
                TickPlacement="BottomRight"
                Value="{Binding Value}"
                Minimum="{Binding Min}"
                Maximum="{Binding Max}"/>
        </StackPanel>
    </HierarchicalDataTemplate>

    <!-- template selector for location filter list -->
    <local:FilterTemplateSelector x:Key="FilterTemplateSelector"
                                    HasChildren="{StaticResource HasChildren}"
                                    Slider="{StaticResource Slider}"
                                    NoChildren="{StaticResource NoChildren}" 
                                    Dma="{StaticResource Other}"/>

    <!-- location filter template  -->
    <HierarchicalDataTemplate x:Key="filterTemplate"
                              ItemsSource="{Binding Children}"
                              ItemTemplateSelector="{StaticResource FilterTemplateSelector}">

        <TextBlock Text="{Binding Name}" 
                   />
    </HierarchicalDataTemplate>




</DockPanel.Resources>

<TreeView x:Name="uiFilterTreeView" 
                  Width="250"
                  ItemsSource="{Binding Path=Filters}"
                  BorderThickness="1,1,1,0"
                  ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                  ItemTemplate="{StaticResource filterTemplate }"/>
谢谢

    <!-- hasChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="HasChildren" 
                              ItemsSource="{Binding Children}">

        <TextBlock Text="{Binding Name}" 
                   />

        <HierarchicalDataTemplate.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>

    </HierarchicalDataTemplate>

    <!-- noChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="NoChildren">
        <StackPanel Orientation="Horizontal">
            <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
            <TextBlock Text="{Binding Name}" />
        </StackPanel>
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate x:Key="Slider">
        <StackPanel Orientation="Horizontal">
            <!--<TextBlock Text="{Binding Name}" />-->

            <Slider Width="100"
                    HorizontalAlignment="Right"
                TickPlacement="BottomRight"
                Value="{Binding Value}"
                Minimum="{Binding Min}"
                Maximum="{Binding Max}"/>
        </StackPanel>
    </HierarchicalDataTemplate>

    <!-- template selector for location filter list -->
    <local:FilterTemplateSelector x:Key="FilterTemplateSelector"
                                    HasChildren="{StaticResource HasChildren}"
                                    Slider="{StaticResource Slider}"
                                    NoChildren="{StaticResource NoChildren}" 
                                    Dma="{StaticResource Other}"/>

    <!-- location filter template  -->
    <HierarchicalDataTemplate x:Key="filterTemplate"
                              ItemsSource="{Binding Children}"
                              ItemTemplateSelector="{StaticResource FilterTemplateSelector}">

        <TextBlock Text="{Binding Name}" 
                   />
    </HierarchicalDataTemplate>




</DockPanel.Resources>

<TreeView x:Name="uiFilterTreeView" 
                  Width="250"
                  ItemsSource="{Binding Path=Filters}"
                  BorderThickness="1,1,1,0"
                  ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                  ItemTemplate="{StaticResource filterTemplate }"/>
这很接近,但在我不想要的主要关卡上设置了一个复选框。我只希望复选框位于应该有复选框的复选框的最低级别

<DockPanel.Resources>

<HierarchicalDataTemplate x:Key="Other">
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding Path=IsChecked }"
                                                  Padding="0 0 5 0" 
                                                  x:Name="itemChecked"/>
                    <TextBlock Text="{Binding Name}" TextTrimming="CharacterEllipsis" />
                </StackPanel>
            </HierarchicalDataTemplate>

            <!-- hasChildrenTemplate -->
            <HierarchicalDataTemplate x:Key="HasChildren" 
                                      ItemsSource="{Binding Children}">

                <TextBlock Text="{Binding Name}" />

                <HierarchicalDataTemplate.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <CheckBox IsChecked="{Binding Path=IsChecked }"
                                                  Padding="0 0 5 0" 
                                                  x:Name="itemChecked"/>
                            <TextBlock Text="{Binding Name}" />
                        </StackPanel>
                    </DataTemplate>
                </HierarchicalDataTemplate.ItemTemplate>

            </HierarchicalDataTemplate>

            <HierarchicalDataTemplate x:Key="Slider">
                <Slider Width="100"
                        TickPlacement="BottomRight"
                        Value="{Binding Value}"
                        Minimum="{Binding Min}"
                        Maximum="{Binding Max}"/>

            </HierarchicalDataTemplate>

            <!-- noChildrenTemplate -->
            <HierarchicalDataTemplate x:Key="NoChildren" ItemsSource="{Binding Children}">
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding Path=IsChecked }"
                                                  Padding="0 0 5 0" 
                                                  x:Name="itemChecked"/>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </HierarchicalDataTemplate>

            <!-- template selector for filter list -->
            <src:FilterTemplateSelector x:Key="FilterTemplateSelector"
                                            HasChildren="{StaticResource HasChildren}"
                                            NoChildren="{StaticResource NoChildren}" 
                                            Slider="{StaticResource Slider}" 
                                            Other="{StaticResource Other}"/>
                    </DockPanel.Resources>

        <TreeView x:Name="uiFilterTreeView2" 
                          Width="250"
                          ItemsSource="{Binding Path=Filters}"
                          BorderThickness="1,1,1,0"
                          ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                          ItemTemplateSelector="{StaticResource FilterTemplateSelector}">
        </TreeView>
    <!-- hasChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="HasChildren" 
                              ItemsSource="{Binding Children}">

        <TextBlock Text="{Binding Name}" 
                   />

        <HierarchicalDataTemplate.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>

    </HierarchicalDataTemplate>

    <!-- noChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="NoChildren">
        <StackPanel Orientation="Horizontal">
            <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
            <TextBlock Text="{Binding Name}" />
        </StackPanel>
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate x:Key="Slider">
        <StackPanel Orientation="Horizontal">
            <!--<TextBlock Text="{Binding Name}" />-->

            <Slider Width="100"
                    HorizontalAlignment="Right"
                TickPlacement="BottomRight"
                Value="{Binding Value}"
                Minimum="{Binding Min}"
                Maximum="{Binding Max}"/>
        </StackPanel>
    </HierarchicalDataTemplate>

    <!-- template selector for location filter list -->
    <local:FilterTemplateSelector x:Key="FilterTemplateSelector"
                                    HasChildren="{StaticResource HasChildren}"
                                    Slider="{StaticResource Slider}"
                                    NoChildren="{StaticResource NoChildren}" 
                                    Dma="{StaticResource Other}"/>

    <!-- location filter template  -->
    <HierarchicalDataTemplate x:Key="filterTemplate"
                              ItemsSource="{Binding Children}"
                              ItemTemplateSelector="{StaticResource FilterTemplateSelector}">

        <TextBlock Text="{Binding Name}" 
                   />
    </HierarchicalDataTemplate>




</DockPanel.Resources>

<TreeView x:Name="uiFilterTreeView" 
                  Width="250"
                  ItemsSource="{Binding Path=Filters}"
                  BorderThickness="1,1,1,0"
                  ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                  ItemTemplate="{StaticResource filterTemplate }"/>

我确保每个主节点都有一个集合,从而使它正常工作。滑块是单个子节点

    <!-- hasChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="HasChildren" 
                              ItemsSource="{Binding Children}">

        <TextBlock Text="{Binding Name}" 
                   />

        <HierarchicalDataTemplate.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>

    </HierarchicalDataTemplate>

    <!-- noChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="NoChildren">
        <StackPanel Orientation="Horizontal">
            <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
            <TextBlock Text="{Binding Name}" />
        </StackPanel>
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate x:Key="Slider">
        <StackPanel Orientation="Horizontal">
            <!--<TextBlock Text="{Binding Name}" />-->

            <Slider Width="100"
                    HorizontalAlignment="Right"
                TickPlacement="BottomRight"
                Value="{Binding Value}"
                Minimum="{Binding Min}"
                Maximum="{Binding Max}"/>
        </StackPanel>
    </HierarchicalDataTemplate>

    <!-- template selector for location filter list -->
    <local:FilterTemplateSelector x:Key="FilterTemplateSelector"
                                    HasChildren="{StaticResource HasChildren}"
                                    Slider="{StaticResource Slider}"
                                    NoChildren="{StaticResource NoChildren}" 
                                    Dma="{StaticResource Other}"/>

    <!-- location filter template  -->
    <HierarchicalDataTemplate x:Key="filterTemplate"
                              ItemsSource="{Binding Children}"
                              ItemTemplateSelector="{StaticResource FilterTemplateSelector}">

        <TextBlock Text="{Binding Name}" 
                   />
    </HierarchicalDataTemplate>




</DockPanel.Resources>

<TreeView x:Name="uiFilterTreeView" 
                  Width="250"
                  ItemsSource="{Binding Path=Filters}"
                  BorderThickness="1,1,1,0"
                  ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                  ItemTemplate="{StaticResource filterTemplate }"/>

    <!-- hasChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="HasChildren" 
                              ItemsSource="{Binding Children}">

        <TextBlock Text="{Binding Name}" 
                   />

        <HierarchicalDataTemplate.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>

    </HierarchicalDataTemplate>

    <!-- noChildrenTemplate -->
    <HierarchicalDataTemplate x:Key="NoChildren">
        <StackPanel Orientation="Horizontal">
            <CheckBox IsChecked="{Binding Path=IsChecked }"
                                          Padding="0 0 5 0" 
                                          x:Name="itemChecked"/>
            <TextBlock Text="{Binding Name}" />
        </StackPanel>
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate x:Key="Slider">
        <StackPanel Orientation="Horizontal">
            <!--<TextBlock Text="{Binding Name}" />-->

            <Slider Width="100"
                    HorizontalAlignment="Right"
                TickPlacement="BottomRight"
                Value="{Binding Value}"
                Minimum="{Binding Min}"
                Maximum="{Binding Max}"/>
        </StackPanel>
    </HierarchicalDataTemplate>

    <!-- template selector for location filter list -->
    <local:FilterTemplateSelector x:Key="FilterTemplateSelector"
                                    HasChildren="{StaticResource HasChildren}"
                                    Slider="{StaticResource Slider}"
                                    NoChildren="{StaticResource NoChildren}" 
                                    Dma="{StaticResource Other}"/>

    <!-- location filter template  -->
    <HierarchicalDataTemplate x:Key="filterTemplate"
                              ItemsSource="{Binding Children}"
                              ItemTemplateSelector="{StaticResource FilterTemplateSelector}">

        <TextBlock Text="{Binding Name}" 
                   />
    </HierarchicalDataTemplate>




</DockPanel.Resources>

<TreeView x:Name="uiFilterTreeView" 
                  Width="250"
                  ItemsSource="{Binding Path=Filters}"
                  BorderThickness="1,1,1,0"
                  ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                  ItemTemplate="{StaticResource filterTemplate }"/>