WPF:按钮没有占用列表框中的完整空间

时间:2015-08-28 16:23:28

标签: wpf xaml listbox styles

我有一个ListBox,其中我将通过棱镜添加一些Button

现在,我有以下代码(这里有一些虚拟按钮仅用于测试目的:

<DockPanel LastChildFill="True">
    <ListBox HorizontalContentAlignment="Stretch" Padding="0" Margin="0" BorderBrush="Black" DockPanel.Dock="Left" HorizontalAlignment="Stretch">
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">

            </Style>
        </ListBox.ItemContainerStyle>
        <ListBox.Resources>
            <Style TargetType="Button">
                <Setter Property="Height" Value="60" />
                <Setter Property="BorderBrush" Value="Transparent" />
                <Setter Property="Background" Value="Transparent" />
                <Setter Property="BorderThickness" Value="0" />
                <Setter Property="Margin" Value="0" />
                <Setter Property="HorizontalAlignment" Value="Stretch"/>
            </Style>
        </ListBox.Resources>
        <Button>Button 1</Button>
        <Button >Button 2</Button>
    </ListBox>
    <ContentControl></ContentControl>
</DockPanel>

我目前遇到的问题是我的按钮没有占据整个空间:

enter image description here

  • 如何确保它使用所有可用空间?
  • 有没有办法确保所有按钮的高度都是宽度?

(为了清楚起见,我不想在按钮上设置任何内容,因为它们将由不同模块的Prism提供)

当我运行应用程序并聚焦一个对象时,似乎我们看到ListBoxItem占据了整个位置,但内部的Button不是:

enter image description here

1 个答案:

答案 0 :(得分:2)

  

如何确保它使用所有可用空间?

这是由ListBox控件模板的设计方式决定的。要删除按钮左侧和右侧的小边距,请为ListBoxItem样式设置Padding = 0。

        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="Padding" Value="0" />
            </Style>
        </ListBox.ItemContainerStyle>

No padding

  

有没有办法确保所有按钮的高度都是宽度?

您可以执行RelativeSource绑定,将容器的高度绑定到父ListBox的实际宽度:

        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="Padding" Value="0" />
                <Setter Property="VerticalContentAlignment" Value="Stretch" />
                <Setter Property="Height" Value="{Binding RelativeSource={RelativeSource AncestorType=ListBox},Path=ActualWidth}" />
            </Style>
        </ListBox.ItemContainerStyle>

Square buttons