Свойство Validation.ErrorTemplate ожидает ControlTemplate
, а не UserControl
. Вот почему ваш код не работает. Вам лучше оставить свой ValidationErrorTemplate и поместить его в общий ResourceDictionary
, к которому вы можете получить доступ в любом месте вашего приложения (или там, где вам это нужно). Например, вы можете поместить его в App.xaml и затем ссылаться на него, используя DynamicResource
.
РЕДАКТИРОВАТЬ: ОК, мы идем с более подробным объяснением. Если это не является обязательным требованием, я думаю, что вам лучше работать с XAML, а не с чрезмерной загрузкой кода ResourceDictionaries и назначением свойств. Вы можете легко добиться желаемого поведения в XAML следующим образом:
Откройте файл с именем «App.xaml» в вашем проекте приложения WPF. Visual Studio / Blend создаст этот файл автоматически для вас. Этот файл содержит раздел <Application.Resources>
. Добавьте свой ControlTemplate в этот раздел:
<Application.Resources>
<ControlTemplate x:Key="ValidationErrorTemplate">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<AdornedElementPlaceholder/>
<Image Name="ValidizorImage" Stretch="None" Source="validizor.gif" ToolTip="{Binding [0].ErrorContent}" ToolTipService.InitialShowDelay="0" ToolTipService.ShowDuration="60000"/>
</StackPanel>
</ControlTemplate>
</Application.Resources>
Теперь просто назначьте этот шаблон ошибки своим элементам управления, используя свойство Validation.ErrorTemplate
, например:
<TextBox ... Validation.ErrorTemplate="{DynamicResource ValidationErrorTemplate}" />
Конечно, вы должны иметь привязку с ValidationRules, определенную для соответствующих свойств элемента управления (например, свойство Text
TextBox). В простом приложении этот код работает для меня: изображение отображается в случае сбоя проверки.
Я не эксперт в том, чтобы делать все это в коде, так как я очень предпочитаю XAML для определения пользовательского интерфейса. Но, насколько я могу сказать, ваш код выглядит нормально для меня. Проверка действительно проваливается? Проверьте это, удалив Validation.ErrorTemplate. Если ваш TextBox получает красную рамку, значит, он не работает - иначе может быть ошибка в вашей логике проверки?!
HTH, геххо.