Rod at work Ответов: 0

Попытка стилизовать текстовый блок, используемый в 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.Ресурсы. Я не понимаю почему. Пожалуйста, покажи мне, что я сделал не так.

0 Ответов