ControlTemplate и валидация - Как позиционировать элементы? - PullRequest
0 голосов
/ 01 февраля 2011

Я создал ControlTemplate, который отображается, если в моем текстовом поле есть ошибка проверки. Мой контрольный шаблон выглядит так

<ControlTemplate x:Key="TextBoxErrorTemplate">
  <TextBlock  Foreground="Orange" FontSize="12pt">Field can't be empty</TextBlock>
</ControlTemplate>

Однако, если возникают ошибки проверки, textBlock появляется на textBox - и пользователь не может ввести правильное значение. Есть ли способ установить позицию TextBlock - тот, который показывает информацию об ошибке?

1 Ответ

2 голосов
/ 01 февраля 2011

ErrorTemplates предназначены для украшения элемента управления, а не для изменения его внутренних свойств. Для этого вы должны использовать стиль с соответствующим триггером:

            <Style TargetType="TextBox">
                <Style.Triggers>
                    <Trigger Property="Validation.HasError" Value="True">
                        <Setter Property="Foreground" Value="Orange"/>
                        <Setter Property="FontSize" Value="12"/>
                    </Trigger>
                </Style.Triggers>
            </Style>

Если вы хотите отобразить некоторый текст, вы можете использоватьтакой шаблон:

    <ControlTemplate x:Key="TextBoxErrorTemplate">
        <StackPanel Orientation="Horizontal">
            <AdornedElementPlaceholder/>
            <TextBlock  Foreground="Orange" FontSize="12pt">Field can't be empty</TextBlock>
        </StackPanel>
    </ControlTemplate>

TextBlock будет отображаться справа от TextBox.

Если вы просто хотите показать сообщения об ошибках, я бы предложил установить подсказку для TextBoxи связать его с ошибками проверки.

...