Слой adorner находится сверху элемента и может перехватывать взаимодействия мыши.В вашем случае, применяя фон к DockPanel, вы указываете WPF, что объект имеет область «HitTestVisible» и будет перехватывать щелчки мыши.
Еще одно запутанное замечание: «Прозрачный» по-прежнемуHitTestVisible.Если вы не хотите, чтобы он перехватывал щелчки мыши, вам следует установить фон "{x: Null}" или оставить его пустым.
Два варианта:
- Установить Background = "{x: Null}" .Это в основном не фон и предотвращает тесты мыши.
- Укажите IsHitTestVisible = "False" на панели DockPanel.Это позволит взаимодействию с мышью обойти этот слой и перейти к следующему доступному слою.
РЕДАКТИРОВАТЬ:
Вот пример, который работает для меня в KaXaml.Просто введите что-то вроде «word» в текстовые поля, чтобы сгенерировать ошибку проверки.Установив цвет фона на полупрозрачный, я могу видеть текстовое поле.Настройка IsHitTestVisible = "False" позволяет мне щелкать мышью в текстовом поле.
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<ControlTemplate x:Key="validationTemplate">
<DockPanel Background="#5000" IsHitTestVisible="False">
<TextBlock Foreground="Red" FontSize="20">!</TextBlock>
<AdornedElementPlaceholder/>
</DockPanel>
</ControlTemplate>
<Style TargetType="TextBox" x:Key="validationStyle">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="Background" Value="Green" />
</Trigger>
</Style.Triggers>
</Style>
</Page.Resources>
<StackPanel Name="grd" Width="100" Height="100">
<TextBox
VerticalAlignment="Top"
Validation.ErrorTemplate="{StaticResource validationTemplate}"
Text="{Binding ElementName=grd, Path=Width, Mode=TwoWay, ValidatesOnExceptions=True}" />
<TextBox
VerticalAlignment="Top"
Text="{Binding ElementName=grd, Path=Height, Mode=TwoWay, ValidatesOnExceptions=True}"
Style="{StaticResource validationStyle}"
>
</TextBox>
</StackPanel>
</Page>