Как создать шаблон для элемента управления ListView с группировкой флажок в WPF
Привет,
Я работаю над некоторым шаблоном WPF, создающим флажок группировки. На первом уровне флажок не требуется. Ребенок второго уровня имеет флажок, и группа детей также имеет флажок.
Экс:
RootNode -> []Child x.x.x.x first none -> [] sub child 1 y.y.y.y second - -> [] sub child 2 -> []Child 2 -> [] sub child2.1 z.z.z.z third needed RootNode2 -> []Child -> [] sub child a.a.a.a value not required
Может ли кто-нибудь помочь в этом деле?
Что я уже пробовал:
<ListView Grid.Row="2" Grid.RowSpan="2" Name="lvRecommendations" ItemsSource="{Binding Path=ListOfRootNode}" Height="350" ScrollViewer.HorizontalScrollBarVisibility="Auto"> <ListView.Resources> <Style TargetType="{x:Type GridViewColumnHeader}"> <Setter Property="HorizontalContentAlignment" Value="Left" /> </Style> <Style x:Key="FirstLevel" TargetType="{x:Type GroupItem}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type GroupItem}"> <Expander IsExpanded="True" HorizontalAlignment="Stretch" Grid.Column="0" Grid.ColumnSpan="2"> <Expander.Header> <Border HorizontalAlignment="Stretch" Padding="2" Grid.ColumnSpan="2" > <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" > <TextBlock Text="{Binding Name}" VerticalAlignment="Center" Grid.RowSpan="2" HorizontalAlignment="Stretch"></TextBlock> </StackPanel> </Border> </Expander.Header> <Grid Background="#FFFFFF"> <ItemsPresenter /> </Grid> </Expander> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="SecondLevel" TargetType="{x:Type GroupItem}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate x:Name="ctemp" TargetType="{x:Type GroupItem}"> <Expander x:Name="ComponentExpander" IsExpanded="True" HorizontalAlignment="Stretch" Grid.Column="0" Grid.ColumnSpan="2"> <Expander.Header> <Border HorizontalAlignment="Stretch" Padding="2" Grid.ColumnSpan="2" > <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" > <CheckBox IsThreeState="True"> <CheckBox.IsChecked> <MultiBinding Converter="{StaticResource CheckboxConverter}" Mode="OneWay"> <MultiBinding.Bindings> <Binding Path="DataContext.ListOfRootNode" RelativeSource="{RelativeSource AncestorType={x:Type ListView}}" Mode="OneWay"/> <Binding Path="Name" Mode="OneWay" /> </MultiBinding.Bindings> </MultiBinding> </CheckBox.IsChecked> <i:Interaction.Triggers> <i:EventTrigger EventName="Checked" > <i:InvokeCommandAction Command="{Binding DataContext.SelectComponentTypeCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}}" CommandParameter="{Binding Name}"/> </i:EventTrigger> <i:EventTrigger EventName="Unchecked" > <i:InvokeCommandAction Command="{Binding DataContext.DeSelectComponentTypeCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}}" CommandParameter="{Binding Name}"/> </i:EventTrigger> </i:Interaction.Triggers> </CheckBox> <TextBlock Text="{Binding Name}" VerticalAlignment="Center" Grid.RowSpan="2" HorizontalAlignment="Stretch" /> <TextBlock Text="{Binding ItemCount}" FontStyle="Italic" Margin="10,0,0,0" VerticalAlignment="Bottom" HorizontalAlignment="Stretch"/> <TextBlock Text=" Setting(s)" FontStyle="Italic" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Tag="2"/> </StackPanel> </Border> </Expander.Header> <Grid Background="#FFFFFF"> <ItemsPresenter /> </Grid> </Expander> </ControlTemplate> </Setter.Value> </Setter> </Style> <local:GroupItemStyleSelector x:Key="GroupItemSelectorObj" FirstLevel="{StaticResource FirstLevel}" SecondLevel="{StaticResource SecondLevel}"/> </ListView.Resources> <ListView.View> <GridView> <GridViewColumn> <GridViewColumn.HeaderTemplate> <DataTemplate> <TextBlock Text="Setting" /> </DataTemplate> </GridViewColumn.HeaderTemplate> <GridViewColumn.CellTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" x:Name="settingPanel"> <CheckBox Name="chkBoxComponent" IsChecked="{Binding IsChecked}" Checked="OnItemChecked" Unchecked="OnItemUnChecked" /> <TextBlock Text="{Binding SettingName}" /> </StackPanel> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn> <GridViewColumn.HeaderTemplate> <DataTemplate> <TextBlock Text="Image Name"/> </DataTemplate> </GridViewColumn.HeaderTemplate> <GridViewColumn.CellTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding ImageName}"/> </StackPanel> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn> <GridViewColumn.HeaderTemplate> <DataTemplate> <TextBlock Text="Priority"/> </DataTemplate> </GridViewColumn.HeaderTemplate> <GridViewColumn.CellTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding PriorityName}" TextDecorations="Underline" Foreground="Blue" Cursor="Hand"/> <StackPanel Orientation="Horizontal" Margin="3,0,3,0" > <TextBlock Text="[" /> <TextBlock Text="Notes" TextDecorations="Underline" Foreground="Blue" Cursor="Hand"/> <TextBlock Text="]" /> </StackPanel> <StackPanel Orientation="Horizontal"> <TextBlock Text="[" /> <TextBlock Text="CVA" TextDecorations="Underline" Foreground="Blue" Cursor="Hand"/> <TextBlock Text="]" /> </StackPanel> </StackPanel> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn> <GridViewColumn.HeaderTemplate> <DataTemplate> <TextBlock Text="Comments"/> </DataTemplate> </GridViewColumn.HeaderTemplate> <GridViewColumn.CellTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Comments}" /> </StackPanel> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> <ListView.GroupStyle> <GroupStyle ContainerStyleSelector="{StaticResource GroupItemSelectorObj}" /> </ListView.GroupStyle> </ListView>
Graeme_Grant
где ты застрял?
Andrew Baylis
Вы думали об использовании TreeView с иерархическим шаблоном? Это позволит вам иметь один шаблон для верхнего уровня и другой (включая ваш флажок) для детей.
sdileep1
Я создал шаблон таким образом, но это не работает, когда вторая группа шаблонов проверила, что дети не выбраны, и наоборот. Я застрял в threestate не работает для checkbox? может ли кто - нибудь помочь в этом деле?