Есть ли способ установить всплывающую подсказку внутри ErrorTemplate?
В нашем приложении WPF у нас есть общий шаблон управления, который мы используем для последовательного отображения ошибок
<ResourceDictionary>
<ControlTemplate x:Key="ErrorTemplate">
<Border BorderThickness="1" BorderBrush="Red">
<AdornedElementPlaceholder />
</Border>
</ControlTemplate>
</ResourceDictionary>
В другом месте нашего приложения, когда элемент управления может отображать ошибку, мы устанавливаем ErrorTemplate следующим образом
<TextBox Validation.ErrorTemplate="{DynamicResource ErrorTemplate}" />
Теперь я хочу отобразить подсказку в этом шаблоне ошибки, однако настройка свойства всплывающей подсказки на границе не очень помогает, так как подсказка отображается только тогда, когда пользователь наводит курсор мыши на границе шириной в 1 пиксель, а не на сам элемент управления, который находится в ошибке,
Я знаю, что могу установить всплывающую подсказку в стиле, однако этот шаблон ошибки применяется ко многим различным элементам управления (комбинированные окна и т. Д.), И многие из этих элементов управления также используют стили, которые не зависят от моего шаблона ошибки - я действительно хочу быть в состоянии применить мой шаблон ошибки универсальным способом к любому элементу управления.
Есть ли способ установить всплывающую подсказку в ErrorTemplate?
3 ответа
У меня есть стиль, определенный. У меня есть IDataErrorInfo на моем объекте (Customer), который выполняет проверку для свойства (LastName), которое, например, связано с текстовым полем. Вот мой стиль:
<Style x:Key="ValidationTextBox" TargetType="{x:Type Control}">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Margin" Value="0,2,40,2"/>
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<Border Background="#B22222" DockPanel.Dock="Right" Margin="5,0,0,0" Width="20" Height="20" CornerRadius="10"
ToolTip="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
<TextBlock Text="!" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="White"/>
</Border>
<AdornedElementPlaceholder Name="customAdorner" VerticalAlignment="Center">
<Border BorderBrush="#B22222" BorderThickness="1" />
</AdornedElementPlaceholder>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style
<TextBox Style="{StaticResource ValidationTextBox}" Text="{Binding Path=Customer.LastName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" />
Как я уже сказал в своем ответе здесь вы можете:
<ControlTemplate x:Key="ErrorTemplate">
<Border BorderThickness="1" BorderBrush="Red"
Background="Transparent"
ToolTip="{Binding Path=/ErrorContent}">
<AdornedElementPlaceholder />
</Border>
</ControlTemplate>
Извините, у меня не было времени вчера... Не могли бы вы попробовать ниже и посмотреть, за чем вы, пожалуйста?
<Style x:Key="ValidationTextBox2" TargetType="{x:Type Control}">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Border BorderBrush="Red" BorderThickness="2">
<DockPanel LastChildFill="True" ToolTip="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" Background="Transparent">
<TextBlock />
<AdornedElementPlaceholder Name="customAdorner" VerticalAlignment="Center">
</AdornedElementPlaceholder>
</DockPanel>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>