Попытка стилизовать текстовый блок, используемый в validationrule
Я работаю над пользовательским элементом управления XAML для отображения ошибок проверки с помощью ValidationRule и шаблона данных для отображения ошибки проверки пользователю. Я думал, что достаточно было бы вставить текстовый блок, стилизовать его красным цветом в качестве цвета переднего плана и т. д. Оказывается, я ошибался на этот счет. Очевидно, что любой элемент управления в шаблоне данных не может быть просто стилизован. Я нашел эту ссылку на переполнение стека, которая выглядела очень многообещающей для решения моей проблемы: WPF некоторые стили не применяются к элементам управления DataTemplate.
Что я уже пробовал:
Следуя ответу, который начинается со слов: "я обнаружил простой обходной путь..." к сообщению о том, что я дал, у меня есть этот код:
<StackPanel Orientation="Horizontal"> <StackPanel.Resources> <DataTemplate DataType="{x:Type ValidationError}"> <DataTemplate.Resources> <Style TargetType="TextBlock" BasedOn="{StaticResource {x:Type TextBlock}}" /> </DataTemplate.Resources> <TextBlock Text="{Binding ErrorContent}" Foreground="Red" VerticalAlignment="Center" FontWeight="Bold"/> </DataTemplate> </StackPanel.Resources> <TextBox x:Name="MaxProficienciesTextBox" Style="{StaticResource LeftAlignTextBoxStyle}" Margin="0,5,3,5" MaxLength="2" IsEnabled="{Binding IsMaxProficienciesEnabled}" KeyUp="MaxProficienciesTextBox_KeyUp" Loaded="MaxProficienciesTextBox_Loaded"> <TextBox.Resources> <val:BindingProxy x:Key="proxy" Data="{Binding}" /> </TextBox.Resources> <TextBox.Text> <Binding Path="MaxProficiencies" UpdateSourceTrigger="PropertyChanged" ValidatesOnExceptions="True"> <Binding.ValidationRules> <val:MaxProficienciesValidationRule Min="1"> <val:MaxProficienciesValidationRule.Wrapper> <val:MaxProficienciesValidationRuleWrapper SolutionID="{Binding SolutionID}" /> </val:MaxProficienciesValidationRule.Wrapper> </val:MaxProficienciesValidationRule> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox> <ContentPresenter Content="{Binding ElementName=MaxProficienciesTextBox, Path=(Validation.Errors)[0].ErrorContent}" /> </StackPanel>
Я получаю ошибку в стиле {x:Type TextBlock} в DataTemplate.Ресурсы. Я не понимаю почему. Пожалуйста, покажи мне, что я сделал не так.