2014-03-05 118 views
0

分组组合框,我能够在这里找到一个分组组合框http://www.jarloo.com/wpf-combobox-with-groupings/WPF与膨胀

它适合我使用的例子,除了我需要一个额外的行为。这些项目应该都可以在它们各自的头文件(使用扩展器)下折叠。

例如, 水果 苹果 橙色 葡萄 动物 猫 狗 牛

以上的项目将被显示在组合框的组合风格,但我会想每头(这是水果,动物)是使用扩展器可折叠。你能帮助一个例子吗?

感谢, CHEV

+0

那你试试? – nvoigt

回答

2

预览试试这个

<Grid> 
<Grid.Resources> 
    <Style x:Key="GroupItem" TargetType="{x:Type GroupItem}"> 
     <Setter Property="Margin" Value="0,0,0,5"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type GroupItem}"> 
        <Expander IsExpanded="True"> 
         <Expander.Header> 
          <DockPanel> 
           <TextBlock Text="{Binding Name}" FontWeight="Bold" Margin="2,5,0,2" FontSize="14"/> 
          </DockPanel> 
         </Expander.Header> 
         <Expander.Content> 
          <Border Margin="5,0,0,0"> 
           <ItemsPresenter /> 
          </Border> 
         </Expander.Content> 
        </Expander> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Grid.Resources> 
<ComboBox Height="27" HorizontalAlignment="Left" Margin="162,109,0,0" VerticalAlignment="Top" Width="195" DisplayMemberPath="Item" Name="cboGroup"> 
    <ComboBox.GroupStyle> 
     <GroupStyle ContainerStyle="{StaticResource GroupItem}"/> 
    </ComboBox.GroupStyle> 
</ComboBox> 
</Grid> 
+0

谢谢。这工作! – Jithu

0

你想要的是一个TreeView而不是ComboBox。 WPF TreeView本地支持此行为。从MSDN下面的例子。

enter image description here

注意:这没有你要找的下拉功能。

您的代码应该是这样的:

<TreeView SelectedItemChanged="TreeView_SelectedItemChanged"> 
    <TreeViewItem Header="Fruit"> 
    <TreeViewItem Header="Apple"/> 
    <TreeViewItem Header="Orange"/> 
    <TreeViewItem Header="Grape"/> 
    </TreeViewItem> 
<TreeViewItem Header="Animals"> 
    <TreeViewItem Header="Cat"/> 
    <TreeViewItem Header="Dog"/> 
    <TreeViewItem Header="Cow"/> 
    </TreeViewItem> 
</TreeView> 

编辑:增加额外的代码,以防止用户点击的标题项目,而是它只是折叠/展开的节点。

private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
{ 
    var item = e.NewValue as TreeViewItem; 
    if (item == null ||item.Items.Count == 0) return; 
    item.IsExpanded = !item.IsExpanded; 
    item.IsSelected = false; 
} 

编辑:这里的id是什么会是什么样子

enter image description here

+0

对回票的解释会很好 – BenVlodgi

+0

使用树型表示父项可选的可扩展项目。而使用分组时,组头本身是不可选择的。有一个可选择的家长可能会混淆用户认为有效的项目选择。 –

+0

@JoelLucsy这是一个有效的点,所以我现在编辑我的示例,以防止发生这种情况。 – BenVlodgi