Скрытый AdornedElementPlaceholder в validationTemplate - PullRequest
2 голосов
/ 08 июля 2011

Уважаемые уважаемые люди из stackoverflow, почему мое текстовое поле, являющееся моим проверенным элементом управления, скрыто за фоном DockPanel в этом шаблоне?

    <ControlTemplate x:Key="validationTemplate">
        <DockPanel Background="Black">
            <TextBlock Foreground="Red" FontSize="20">!</TextBlock>
            <AdornedElementPlaceholder/>
        </DockPanel>
    </ControlTemplate>

Если задан фон "Прозрачный", текстовое поле видно, но я не могу щелкнуть внутри (курсор не изменится).

Как я могу установить фон для моего шаблона, не скрывая мой AdorendElementPlaceholder?

спасибо gpx

1 Ответ

3 голосов
/ 09 июля 2011

Слой adorner находится сверху элемента и может перехватывать взаимодействия мыши.В вашем случае, применяя фон к DockPanel, вы указываете WPF, что объект имеет область «HitTestVisible» и будет перехватывать щелчки мыши.

Еще одно запутанное замечание: «Прозрачный» по-прежнемуHitTestVisible.Если вы не хотите, чтобы он перехватывал щелчки мыши, вам следует установить фон "{x: Null}" или оставить его пустым.

Два варианта:

  1. Установить Background = "{x: Null}" .Это в основном не фон и предотвращает тесты мыши.
  2. Укажите 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...