WPF:按钮没有在列表框中使用完整的 space

WPF: Button not taking the full space in a Listbox

我有一个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>

我目前遇到的问题是我的按钮没有完全使用 space:

(明确一点,我不想在按钮上设置任何内容,因为它们将由 Prism 从不同的模块提供)

当我 运行 应用程序并聚焦一个对象时,我们似乎看到 ListBoxItem 占据了全部位置,但里面的 Button 没有:

How to make sure it use all the available space?

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

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

Is there some way to ensure that all buttons will be have the height = to the width?

您可以执行 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>