Я пытаюсь настроить подкласс TextBox, который изменит свой стиль на основе нескольких разных вещей, и я столкнулся с двумя проблемами. Первый триггер, VisualBrush, запускается правильно, но не записывает текст в строку myName. Я попытался сделать myName свойством, но по какой-то причине метод set вызывает исключение StackOverFlowException.
Вторая проблема связана с DataTrigger, который не запускается, даже если для isRequired задано значение false.
Это все в пользовательском элементе управления, который наследует TextBox.
Вот мой XAML:
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Text" Value="">
<Setter Property="Background">
<Setter.Value>
<VisualBrush Stretch="None">
<VisualBrush.Visual>
<TextBlock Foreground="Gray" FontSize="24">
<TextBlock.Text>
<Binding Path="myName" RelativeSource="{RelativeSource Self}" />
</TextBlock.Text>
</TextBlock>
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
</Trigger>
<DataTrigger Binding="{Binding Path=isRequired, Source={RelativeSource Self}}" Value="False">
<Setter Property="Text" Value="100" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
CS:
public partial class SuperTB : TextBox
{
public String myName
{
get { return myName; }
set {}
}
DependencyProperty isRequiredProperty = DependencyProperty.Register("isRequired", typeof(Boolean), typeof(SuperTB));
public Boolean isRequired
{
get { return (Boolean)GetValue(isRequiredProperty); }
set { SetValue(isRequiredProperty, value); }
}
public SuperTB()
{
InitializeComponent();
myName = "Unicorns!";
}
}
Это код, который StackOverflow передает его. Также не работает, но нет исключения:
public string myName = "Rainbows!";