0

我不知道该怎么做,但我创建了一个自定义 Panel FooPanel。我希望我的 FooPanel 强制所有孩子都适合面板预定的尺寸(这样它们是统一的)。我知道,UniformGrid但我也有一些其他的东西。

我不知道如何强迫孩子们适应我告诉他们的盒子。


Child.xaml:

<Style TargetType="{x:Type l:FooChild}">
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
    <Setter Property="Padding" Value="12,2,12,2" />
    <Setter Property="Foreground" Value="Black" />
    <Setter Property="Background" Value="White" />
    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    <Setter Property="VerticalContentAlignment" Value="Stretch" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type l:FooChild}">
                <Border x:Name="ChromeBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
                    <ContentPresenter ContentSource="Header" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                      HorizontalAlignment="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
                                      VerticalAlignment="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
                                      />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
4

4 回答 4

1

在您的自定义面板中,您只能给孩子一些空间。之后,由子元素如何在该空间中对齐。此行为由 a 的HorizontalAlignment/VerticalAlignment属性控制FrameworkElement。如果这两个属性都设置为,Stretch则元素将拉伸,占用您在面板内为它们提供的所有空间。

更新:

除了HorizontalContentAllignment/VerticalContentAlignment设置HorizontalAlignment/VerticalAlignment属性到元素Stretch的样式中。FooChild

于 2011-04-06T14:19:35.707 回答
0

您是否尝试设置 Horizo​​ntalAlignment="Stretch" 或 Horizo​​ntalContentAlignment="Stretch" (并且有一个 VertialAlignment)

你能提供一些xaml吗?我也许能以这种方式更好地帮助你。:)

于 2011-04-06T14:03:54.423 回答
0

您可以将所有孩子塞入DockPanel控件中,确保他们是唯一的孩子,然后将LastChildFill属性设置为True.

或者,您可以覆盖所有孩子的MeasureOverride 属性,并强制他们全部扩展到他们可用的最大空间量。

于 2011-04-06T14:06:55.080 回答
0

就在几周前,我遇到了这样的问题。我像这样修复它,但我注意到这不是首选方法。

    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </ListBox.ItemContainerStyle>

这是一个ListBox,但我想它适用于任何 ItemsControl。

资料来源:另一个SO问题

于 2011-04-06T14:11:04.660 回答