2

几个月来,我一直在玩 wpf 并取得了不同程度的成功,但这个让我很难过。我有一个包含扩展器的 ListBox,如下所示:

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

我试图弄清楚如何:

  1. 防止在 ListBox 中选中 Expander 的内容部分时更改颜色。我只希望 Expander 的标题有蓝色背景,而不是 CheckBoxes

  2. 当单击其标题时,使扩展器成为 ListView 中的选定项。目前,您必须在扩展器标题文本之外单击以使其在列表视图中被选中

4

1 回答 1

0

您的第一个问题的解决方案很简单。只需将其添加到ListBox.Resources

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

您可以随意将颜色更改为您喜欢的任何颜色。

您的第二个问题的解决方案远非简单。我想说的是,在 a 中声明控件ListBox远非最佳。一个更好的解决方案是创建一个数据类型类,将这些实例的集合绑定到ListBox.ItemsSource属性,然后创建DataTemplates 来定义每个项目的外观......这就是您应该声明Expander控件的地方。

与 StackOverflow 一样,我们更喜欢在每个帖子中问一个问题,请尝试我刚才的建议,如有必要,在线搜索相关术语,然后返回一个新问题,向我们展示您的新代码。

于 2013-09-11T12:12:11.647 回答