WPF C # Custom Control - Как заставить детей следовать строгим размерам (растянуть) - PullRequest
0 голосов
/ 06 апреля 2011

Я не уверен, как это сделать, но я создал пользовательскую панель 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 ]

1 голос
/ 06 апреля 2011

В вашей пользовательской панели вы можете только дать детям немного места. После этого это зависит от дочерних элементов, как выровнять себя в этом пространстве. Это поведение контролируется HorizontalAlignment / VerticalAlignment свойствами FrameworkElement. Если оба эти свойства установлены на Stretch, тогда элемент будет растягиваться, занимая все пространство, которое вы им дали внутри вашей панели.

Обновление:

В дополнение к HorizontalContentAllignment / VerticalContentAlignment установите свойства HorizontalAlignment / VerticalAlignment на Stretch в стиле элемента FooChild.

0 голосов
/ 06 апреля 2011

Вы можете добавить всех своих детей в элементы управления DockPanel, убедиться, что они единственные дети, а затем установить для свойства LastChildFill значение True.

В качестве альтернативы вы можете переопределить Свойство MeasureOverride для всех ваших детей и заставляет их расширяться до максимального доступного им пространства.

0 голосов
/ 06 апреля 2011

У меня была такая проблема только пару недель назад.Я исправил это так, но заметил, что это не самый предпочтительный метод.

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

Это для ListBox, но я думаю, что он работает для любого ItemsControl.

Источник: еще один вопрос

0 голосов
/ 06 апреля 2011

Вы пытались установить HorizontalAlignment = "Stretch" или HorizontalContentAlignment = "Stretch" (и есть VertialAlignment)

Не могли бы вы предоставить xaml? Возможно, я смогу помочь тебе лучше. :)

...