Я пытаюсь изменить существующее приложение 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>