Я создал пользовательский элемент управления для упрощенного использования label: control
в формах:
![enter image description here](https://i.stack.imgur.com/4g5Gx.png)
Моя проблема в том, что независимо от того, чтобудучи помещенным в мой контрольный контент, я не могу выровнять его, используя мой код шаблона.Единственный способ, которым это работает, - это когда я помещаю 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
вправо?