首页 > 解决方案 > ContentPresenter - 水平对齐不起作用

问题描述

label: control我为表单的简化使用创建了一个自定义控件:

在此处输入图像描述

我的问题是,无论将什么放入我的控件内容中,我都无法使用我的模板代码对齐它。它起作用的唯一方法是当我直接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 HorizontalAlignmentContentPresenter. 不幸的是,看不到任何效果。

完整的控制代码:

<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向右对齐?

标签: c#wpfxamlcontrolsalignment

解决方案


推荐阅读