ContentPresenter - HorizonalAlignment не работает - PullRequest
0 голосов
/ 27 августа 2018

Я создал пользовательский элемент управления для упрощенного использования label: control в формах:

enter image description here

Моя проблема в том, что независимо от того, чтобудучи помещенным в мой контрольный контент, я не могу выровнять его, используя мой код шаблона.Единственный способ, которым это работает, - это когда я помещаю HorizontalAlignment="Right" непосредственно в элемент управления TextBox:

<local:ControlEntry Label="Enter something">

    <!--  I don't like having HorizontalAlignment here!  -->
    <TextBox Height="20" Width="200" HorizontalAlignment="Right" />

</local:ControlEntry>

Однако я бы предпочел сделать это за кулисами в моем шаблоне элемента управления.

Я говорю об этом конкретном коде XAML:

<Border x:Name="Container"
        HorizontalAlignment="Stretch"
        Grid.Column="1">

    <ContentPresenter Width="{Binding ActualWidth, ElementName=Container}" HorizontalAlignment="Right" />

</Border>

Сначала я растягиваю HorizontalAlignment, чтобы он заполнил ширину ячейки столбца сетки, затем я пытаюсь применитьRight HorizontalAlignment на ContentPresenter.К сожалению, никакого эффекта не видно.

Полный код управления:

<Style TargetType="{x:Type local:ControlLine}">

    <Setter Property="HorizontalContentAlignment" Value="Stretch" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:ControlLine}">

                <!-- Create bottom content border -->
                <Border BorderBrush="#000" BorderThickness="0,0,0,0.5">

                    <StackPanel>

                        <Grid>

                            <!--  Label -> Control  -->
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto" />
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>

                            <!--  Label  -->
                            <TextBlock Grid.Column="0"
                                       Margin="0,12,15,12"
                                       VerticalAlignment="Center"
                                       Text="{Binding Label, RelativeSource={RelativeSource TemplatedParent}}"
                                       TextWrapping="WrapWithOverflow" />

                            <!--  Display content  -->
                            <Border x:Name="Container"
                                    HorizontalAlignment="Stretch"
                                    Grid.Column="1">

                                <ContentPresenter Width="{Binding ActualWidth, ElementName=Container}" HorizontalAlignment="Right" />

                            </Border>

                        </Grid>

                        <!--  Description  -->
                        <TextBlock Text="The control description" />

                    </StackPanel>

                </Border>

            </ControlTemplate>
        </Setter.Value>
    </Setter>

</Style>

Как правильно сохранить ширину и одновременно выровнять содержимое ContentPresenter вправо?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...