WPF如何扩展边框宽度以填充DockPanel中的可用空间

时间:2014-08-04 15:53:44

标签: c# wpf wpf-controls

我有一个自定义控件ButtonRow,最终会进入另一个控件。

非常简单,它有一个边框,标签和一个按钮。

我需要这样做,以便边框将扩展其宽度以填充按钮所在的位置。 这种情况不会发生,如下图所示:

Control Preview

XAML可以在下面找到。我试图摆弄标签和边框的水平对齐,但它们只会重新调整大小以适应标签的文本内容。

我知道存在非常相似的问题和名称的问题,但没有人需要做同样的事情或帮助我解决我的问题。

我尝试在水平对齐中使用StackPanel,但它只是让按钮转到边框旁边。

如何扩展边框以填充可用空间?

<Grid>
    <DockPanel Height="Auto" HorizontalAlignment="Stretch" Margin="0" Name="dockPanel1" VerticalAlignment="Top" Width="Auto">
        <Border BorderBrush="#FFDADFE1" Background="#FFECF0F1" BorderThickness="1" Height="20" Name="bdrFilter" HorizontalAlignment="Stretch">
            <Label Content="Filter..." FontStyle="Italic" Foreground="#FF6C7A89" Height="20" Name="lblFilter" Padding="5,0" HorizontalContentAlignment="Stretch" HorizontalAlignment="Stretch" />
        </Border>
        <Button Style="{StaticResource FlatButtonStyle}" Content="+" Height="20" HorizontalAlignment="Right" Name="btnAddFilter" VerticalAlignment="Top" Width="20" Foreground="#FF6C7A89" ForceCursor="True" BorderBrush="{x:Null}" />
    </DockPanel>
</Grid>

(按钮样式不影响其对齐或任何其他相关属性)

1 个答案:

答案 0 :(得分:7)

DockPanel不是用于此要求的正确Panel ...就像StackPanel一样,它调整其内容的大小。相反,只需使用常规Grid(也使用比DockPanel更少的资源):

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <Border BorderBrush="#FFDADFE1" Background="#FFECF0F1" BorderThickness="1" 
        Height="20" Name="bdrFilter" VerticalAlignment="Top">
        <Label Content="Filter..." FontStyle="Italic" Foreground="#FF6C7A89" 
            Height="20" Name="lblFilter" Padding="5,0" />
    </Border>
    <Button Grid.Column="1" Content="+" Height="20" HorizontalAlignment="Right" 
        Name="btnAddFilter" VerticalAlignment="Top" Width="20" Foreground="#FF6C7A89" 
        ForceCursor="True" BorderBrush="{x:Null}" />
</Grid>

有关WPF中不同Panel的更多信息,请参阅MSDN上的Panels Overview页面。