WPF Combobox Validation.ErrorTemplate error - PullRequest
4 голосов
/ 04 ноября 2010

У меня есть поле со списком, мне нужно отредактировать его шаблон ошибки, чтобы показать красную границу при ошибке проверки.

Я использую следующий стиль

<Style TargetType="{x:Type ComboBox}" >
    <Setter Property="Validation.ErrorTemplate">
        <Setter.Value>
            <ControlTemplate>
                <DockPanel>
                    <Border BorderBrush="Red" BorderThickness="3">
                        <AdornedElementPlaceholder />
                    </Border>
                </DockPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="FontFamily" Value="Segoe UI" />
    <Setter Property="FontSize" Value="12" />
    <Setter Property="VerticalAlignment" Value="Center" />
</Style>

Граница никогда не отображается при возникновении ошибок проверки. Любые советы, что происходит не так?

Ответы [ 5 ]

4 голосов
/ 27 января 2011

На Style вы разместили работы.Вы должны проверить свою привязку, вы добавили ValidatesOnDataErrors=True и ValidatesOnExceptions=True к привязке SelectedValue?

1 голос
/ 20 января 2012

Мне не нравится ни один из ответов здесь.Проще говоря, как изменить цвет границы для шаблона ошибки для ComboBox, используя Blend или нет?Не должно быть приемлемо рисовать другую границу вокруг существующей границы ComboBox.Я выяснил, как создать шаблон ControlTemplate в Blend, но не шаблон проверки.

Я попытался заставить его выглядеть так, будто я изменил реальный цвет рамки, но на самом деле это не то, чего я хочу.Предложения?Чтобы немного усложнить это, я хотел бы отобразить красную звездочку за пределами правой границы элемента управления.

Следующий код является попыткой закрытия, но на самом деле он рисует границу внутри ComboBox, и еслиесли вы присмотритесь, то увидите, что ширина границы составляет 2 пикселя в сочетании с границей ComboBox:

<DockPanel Name="myDockPanel">
        <AdornedElementPlaceholder>
            <Border BorderBrush="Blue" BorderThickness="1" CornerRadius="2" />
        </AdornedElementPlaceholder>
        <TextBlock Text="*" FontWeight="Bold" FontSize="14" Foreground="Red" DockPanel.Dock="Left"  ToolTip="{Binding .CurrentItem}" />
    </DockPanel>
1 голос
/ 03 февраля 2011

Используйте это.

    <Style x:Key="textBoxStyle" TargetType="{x:Type telerik:RadMaskedTextBox}">
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="True">
                <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
                <Setter Property="Control.BorderBrush" Value="Red" />
            </Trigger>
        </Style.Triggers>
    </Style>
1 голос
/ 05 ноября 2010

введите код здесь без панели док-станции, что бесполезно, поскольку оно охватывает только один элемент.Однако, я не знаю, имеет ли смысл оборачивать текстовое поле рамкой, поскольку оно уже имеет рамку!Вы должны попытаться изменить непосредственно цвет его границы.Вы можете попробовать снова использовать панель, но затем поместить границу вокруг панели, т.е.DockPanelAdornedElement

Это имеет больше смысла, потому что панель переноса не имеет собственной границы.

0 голосов
/ 20 января 2012

Я искал еще немного и нашел решение, основанное на другой статье: WPF - Как применить стиль к AdornedElement AdornedElementPlaceholder?

<!-- This works -->
<ComboBox Name="comboBox1" Style="{StaticResource NewComboBoxStyle}" Validation.ErrorTemplate="{StaticResource comboBoxValidationTemplate}" />

<SolidColorBrush x:Key="MainBorderBrush">#FF91B3FF</SolidColorBrush>

<Style x:Key="NewComboBoxStyle" TargetType="{x:Type ComboBox}" BasedOn="{StaticResource myErrorTemplate}">
    <Setter Property="BorderBrush" Value="{DynamicResource MainBorderBrush}" />
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="True">
            <Setter Property="BorderBrush" Value="Blue" />
        </Trigger>
    </Style.Triggers>
</Style>

<!-- Sets ToolTip when Validation.HasError is True. -->
<Style TargetType="Control" x:Key="myErrorTemplate">
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip"
                Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
        </Trigger>
    </Style.Triggers>
</Style>

<ControlTemplate x:Key="comboBoxValidationTemplate">
    <DockPanel Name="myDockPanel">
        <AdornedElementPlaceholder/>
        <TextBlock Text="*" FontWeight="Bold" FontSize="14" Foreground="Red" DockPanel.Dock="Left" ToolTip="{Binding .CurrentItem}" />
    </DockPanel>
</ControlTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...