WPF - Значок предупреждения отображается только с красными рамками, без красной рамки - PullRequest
0 голосов
/ 26 февраля 2019

Как изменить красное поле вокруг TextBox на красный кружок с восклицательным знаком? При ошибке WPF может отображать либо красную рамку вокруг TextBox, либо значок предупреждения.Когда я создаю простое тестовое приложение для проверки правил проверки, я получаю только красные границы.Но я видел значки предупреждений на скриншотах приложений WPF с красными прямоугольниками.Мой босс попросил меня настроить такие иконки для нашего тестового приложения.

Я попытался взглянуть на wpf-samples: они используют стандартный значок предупреждения от CSLA без дополнительного кодирования.Я понятия не имею, почему у меня только красные границы CSLA вместо значка предупреждения CSLA, в то время как я пытался следовать проверочным образцам.

PS Я могу создать значок вручную, но у меня есть строгое требование использовать стандартную, котораяпоявляется автоматически при ошибке проверки.Следующий код показывает, как я делаю это вручную:

    <Style TargetType="{x:Type TextBox}">
        <Setter Property="Validation.ErrorTemplate">
            <Setter.Value>
                <ControlTemplate>
                    <DockPanel>
                        <AdornedElementPlaceholder >
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition />
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition />
                            </Grid.ColumnDefinitions>
                            <Ellipse HorizontalAlignment="Right"
                                     Grid.Row="0" 
                                     Grid.Column="0" 
                                     Height="20" 
                                     Width="20" 
                                     Fill="Red" VerticalAlignment="Center" />
                                <TextBlock HorizontalAlignment="Right"                                           
                                       Grid.Row="0" 
                                       Grid.Column="0" 
                                       Foreground="White" 
                                       FontSize="20">!</TextBlock>
                        </Grid>
                        </AdornedElementPlaceholder>
                    </DockPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>

        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="ToolTip" 
                        Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                        Path=(Validation.Errors)[0].ErrorContent}"/>
            </Trigger>
        </Style.Triggers>
    </Style>

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

WPF не имеет автоматического способа отображения чего-либо, кроме красной рамки вокруг элемента управления вводом.

CSLA вообще ничего не отображает.Он сообщает WPF, что существует ошибка проверки с использованием интерфейса IDataErrorInfo, определенного Microsoft.То, что вы видите, это поведение WPF по умолчанию, отображающее красную рамку.

Вы можете настроить отображение ошибок валидации в WPF, создав новые стили XAML.

Однако пространство имен Csla.Xaml (доступноесли вы ссылались на пакет NuGet CSLA-WPF в своем проекте пользовательского интерфейса), то он включает в себя элемент управления WPF PropertyStatus.Этот элемент управления понимает, как отображать значки ошибок, предупреждений и информации, а также всплывающие подсказки на основе интерфейса IDataErrorInfo и других метаданных, предоставляемых бизнес-объектом CSLA.

Для использования элемента управления PropertyStatus вы можетепоместите элемент управления непосредственно в XAML вашей страницы или создайте стиль XAML.Вы можете увидеть пример использования этого элемента управления в справочном приложении CSLA: ProjectTracker .

0 голосов
/ 26 февраля 2019

SystemIcons.Exclamation, вероятно, даст вам символ, который вы хотите.Объект типа Icon должен быть преобразован в BitmapSource для использования в xaml.

...