Я чувствую, что это должно было быть простым делом, но, очевидно, я делаю что-то глупое.
Я пытаюсь создать UserControl
с DependencyProperty
(перечислением), которое контролирует, будет ли оно просто отображать текст, предоставленный в его Content
дословном свойстве, или добавляет его с дополнительным текстом.
UserControl:
<UserControl x:Class="Controls.UserControls.IndicatorLabel"
x:Name="indicatorLabel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:enum="clr-namespace:MyNamespace;assembly=EnumAssembly">
<Label>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Content, ElementName=indicatorLabel}" />
<TextBlock FontStyle="Italic"
Margin="5,0,0,0">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility"
Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding IndicatorType}"
Value="{x:Static enum:LabelIndicator.Optional}">
<Setter Property="Text"
Value="(Optional)" />
<Setter Property="Visibility"
Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding IndicatorType}"
Value="{x:Static enum:LabelIndicator.Required}">
<Setter Property="Text"
Value="(Required)" />
<Setter Property="Visibility"
Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
</Label>
</UserControl>
Код пользователя UserControl:
public partial class IndicatorLabel : UserControl
{
public static DependencyProperty IndicatorTypeProperty = DependencyProperty.Register("IndicatorType", typeof(LabelIndicator), typeof(IndicatorLabel));
public LabelIndicator IndicatorType
{
get => (LabelIndicator)GetValue(IndicatorTypeProperty);
set => SetValue(IndicatorTypeProperty, value);
}
public IndicatorLabel()
{
InitializeComponent();
}
}
Использование UserControl на другой странице XAML:
<uc:IndicatorLabel Grid.Row="4"
Content="Description"
IndicatorType="Optional" />
Я ожидал увидеть: Описание (Необязательно)
На самом деле, я не смог получить то, что в XAML UserControl, чтобы иметь какое-либо влияние, пока установлено свойство Content
.
EDIT:
Причина, по которой я говорю, что это не имеет никакого эффекта, заключается в том, что даже если поместить символьную строку в свойство Text
первого TextBlock
, все, что находится в свойстве Content
, все равно будет отображаться. Кажется, что ни TextBlock
действительно не показывает.
Так почему это происходит? Разве нельзя использовать свойство Content
для передачи текста в те части, которые я действительно хочу отобразить? Я нарушаю какое-то правило WPF о Content
здесь?