WPF ComboBoxItem 内的折叠可见性

Posted

技术标签:

【中文标题】WPF ComboBoxItem 内的折叠可见性【英文标题】:Collapsed Visibility Within a WPF ComboBoxItem 【发布时间】:2012-12-04 04:52:28 【问题描述】:

我使用了一个样式设置器来扩展我的 ComboBoxItem(和按钮),使其跨越 ComboBox 的整个长度,如下所示:

    <ComboBox >
        <ComboBox.Resources>
            <Style TargetType="ComboBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch" />
            </Style>
        </ComboBox.Resources>
        <ComboBoxItem >
            <DockPanel >
                <Button Content="My Button" />
            </DockPanel>
        </ComboBoxItem>
    </ComboBox>

这很好用。现在,我在同一个 ComboBoxItem 中添加了一个附加按钮,但将其设置为 Visibility Collapsed。

    <ComboBox >
        <ComboBox.Resources>
            <Style TargetType="ComboBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch" />
            </Style>
        </ComboBox.Resources>
        <ComboBoxItem >
            <DockPanel >
                <Button Content="My Button" />
                <Button Content="My Collapsed Button" Visibility="Collapsed" />
            </DockPanel>
        </ComboBoxItem>
    </ComboBox>

现在,新按钮是不可见的,但我希望我的原始按钮仍能拉伸整个 ComboBox,就像上面的代码一样。但是,事实并非如此。为什么会这样?有解决方案吗?我正在使用 DataTriggers 来编辑 Visibility 属性。

注意:如果我只是在 ComboBox 中设置 Horizo​​ntalContentAlignment="Stretch",我也会得到同样的结果。

更新:好的,这实际上与 DockPanel 有关。我将其更改为 StackPanel,它可以按需要工作。但是,我想我仍然很好奇,如果第二个按钮折叠起来,为什么我的第一个按钮不会拉伸整个 DockPanel?

【问题讨论】:

尝试使用每个按钮Dockpanel.Dockproperties 您使用DockPanel id 是否有特定原因,如果您更改为Grid 它会正常工作 【参考方案1】:

只需将DockPanel.Dock 属性设置为Top

  <ComboBox Margin="0,0,0,129">
      <ComboBox.Resources>
          <Style TargetType="ComboBoxItem">
              <Setter Property="HorizontalContentAlignment" Value="Stretch" />
          </Style>
      </ComboBox.Resources>
      <ComboBoxItem >
          <DockPanel >
              <Button Content="My Button" DockPanel.Dock="Top" />
              <Button Content="My Collapsed Button" Visibility="Collapsed" />
          </DockPanel>
      </ComboBoxItem>
   </ComboBox>

【讨论】:

谢谢!我只是习惯于在大多数事情上使用 DockPanel,当我切换面板类型时,我确实意识到它与 DockPanel 相关。我只是假设由于一次只有一个 Button 可见,而另一个已折叠,因此我不需要设置 Dock 属性。但显然不是!

以上是关于WPF ComboBoxItem 内的折叠可见性的主要内容,如果未能解决你的问题,请参考以下文章

WPF XAML 网格可见性触发器

WPF:尝试根据组合框中的选择更改可见性

C# WPF 如何向combobox控件添加类型为comboboxitem的项?

WPF绑定到Listview的Itemtemplate的可见性不起作用[重复]

WPF - 折叠网格单元

C# 窗口可见性,折叠和隐藏