WPF ComboBoxItem中的折叠可见性

时间:2012-12-17 04:35:12

标签: wpf combobox styles visibility

我使用了一个Style setter来伸展我的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?

1 个答案:

答案 0 :(得分: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>