【问题标题】:WPF Listbox containing Expander controls包含扩展器控件的 WPF 列表框
【发布时间】:2013-09-11 11:32:46
【问题描述】:

几个月来,我一直在玩 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. 防止展开器的内容部分在列表框中被选中时改变颜色。我只希望 Expander 的标题有蓝色背景,而不是 CheckBoxes

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

【问题讨论】:

标签: wpf xaml listbox expander


【解决方案1】:

第一个问题的解决方案很简单。只需将其添加到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>

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

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

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

【讨论】:

  • 对于多个问题,我深表歉意。您在上面提供的 xaml 更改了 Expander 的标头和内容控件。我希望能够独立改变它们。对不起,如果我不清楚。
  • 我提供的 XAML 只是删除了默认的蓝色选择颜色。如果您遵循我的建议,那么您可以将代码添加到您的DataTemplate 中,这将更改您喜欢的任何颜色的颜色......第一步只是删除默认的蓝色选择矩形。一旦你到了那个阶段,添加另一个问题,我会告诉你如何......实际上,搜索“WPF SelectedItem background colour”可能会更好,因为这已经被回答过很多次了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
  • 2016-06-22
  • 2019-03-01
  • 1970-01-01
相关资源
最近更新 更多