2015-03-08 3 views
1

Я пытаюсь изменить существующее приложение win WPF, чтобы список флажков, представляющих фильтры, также иногда включал дочерний узел управления слайдером. Это флажки прямо сейчас.Шаблон списка с различными типами элементов управления

Это то, что я хочу. В настоящее время он выглядит просто так, но без слайдера.

(Update взгляд более ясным)

TREE CONTROL 
> Node 1 
> > [X] Node 1.1 
> Node 2 
> > [X] Node 2.1 
> Node 3 
> > [X] Node 3.1 
> > [X] Node 3.2 
> Node 4 
> > |-------| Slider 
> Node 5 
> > Node 5.1 
> > > [X] Node 5.1.1 
> > > [X] Node 5.1.2 
> > Node 5.2 
> > > [X] Node 5.2.1 
> > > [X] Node 5.2.2 
> Node 6 
> > [X] Node 6.1 
> > [X] Node 6.2 
> > [X] Node 6.3 
> Node 7 
> > |------| Slider 

Базовый список является ObservableCollection. В настоящее время у него есть свойство List Children, связанное с селектором шаблонов для получения разных глубин.

Я думаю, мне нужно, чтобы окно списка привязывалось непосредственно к объекту фильтра, а не к списку фильтров Children.

Новые различные объекты фильтра могут иметь или не иметь список или другие свойства для управления слайдером.

Существует селектор шаблонов C#, но он работает в списке «Дети» вместо списка фильтров. Это то, что получает различные глубины детских узлов

Я могу изменить коллекцию и объекты по мере необходимости.

Любые предложения? Я сделал этот тип вещей в js и html, но я noob для WPF и xmal.

Спасибо!

Это близко, но устанавливает флажок на основные уровни, которые я не хочу. Мне нужны только флажки на самом низком уровне, которые должны иметь флажки.

<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> 

ответ

1

Я получил его работу, убедившись, что каждый главный узел имеет коллекцию. Ползунки - это единственный дочерний узел.

<!-- 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 }"/> 
Смежные вопросы