包含扩展程序控件的WPF列表框

包含扩展程序控件的WPF列表框,wpf,xaml,listbox,expander,Wpf,Xaml,Listbox,Expander,我已经和wpf打了几个月的交道,取得了喜忧参半的成功,但这一次让我感到困惑。我有一个包含扩展器的列表框,如下所示: <ListBox> <Expander Header="Options"> <StackPanel> <CheckBox Content="Option 1" /> <CheckBox Content="Option 2" /> <CheckBox Cont

我已经和wpf打了几个月的交道,取得了喜忧参半的成功,但这一次让我感到困惑。我有一个包含扩展器的列表框,如下所示:

<ListBox>
  <Expander Header="Options">
    <StackPanel>
        <CheckBox Content="Option 1" />
        <CheckBox Content="Option 2" />
        <CheckBox Content="Option 3" />
    </StackPanel>
  </Expander>
  <Expander Header="More Options">
    <StackPanel>
        <CheckBox Content="Option 1" />
        <CheckBox Content="Option 2" />
        <CheckBox Content="Option 3" />
    </StackPanel>
  </Expander>
</ListBox>

我正在努力想办法:

  • 在列表框中选择扩展器时,防止扩展器的内容部分改变颜色。我只希望扩展器的标题有一个蓝色的背景,而不是复选框

  • 单击列表视图的标题时,使其成为列表视图中的选定项。此时,您必须单击扩展器标题文本的外部,以使其在列表视图中处于选中状态


  • 第一个问题的答案很简单。只需将其添加到
    列表框中即可。参考资料

    <ListBox.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />
    </ListBox.Resources>
    
    
    
    您可以自由地将颜色更改为您喜欢的任何颜色

    你的第二个问题的解决方案远非简单。我想说的是,在
    列表框中声明控件远远不是最优的。更好的解决方案是创建一个数据类型类,将这些实例的集合绑定到
    ListBox.ItemsSource
    属性,然后创建
    DataTemplate
    s来定义每个项的外观。。。这就是您应该声明
    扩展器
    控件的位置


    在StackOverflow,我们希望每个帖子都能问一个问题,请尝试我刚才的建议,如果需要,在线搜索相关术语,然后带着新问题回来,向我们展示您的新代码。

    对于B)请参见。对于A)使用背景颜色作为标题的控件,或者明确设置组合框的背景颜色。对于多个问题,我深表歉意。上面给出的xaml更改了扩展器的头和内容控制。我希望能够独立地改变它们。如果我不清楚,很抱歉。我提供的XAML只是删除了默认的蓝色选择颜色。如果您遵循我的建议,那么您可以将代码添加到
    DataTemplate
    中,这将改变您喜欢的任何东西的颜色。。。第一步只是删除默认的蓝色选择矩形。一旦你到了那个阶段,再添加一个问题,我将向你展示如何。。。实际上,搜索“WPF SelectedItem background color”可能会更好,因为这已经被回答了很多次了。