WPF-警告图标仅带有红色边框显示,没有红色框

时间:2019-02-25 22:18:18

标签: wpf xaml csla

如何将文本框周围的红色框更改为带有感叹号的红色圆圈? 错误时,WPF可以在TextBox周围显示红色边框或警告图标。 当我创建一个简单的测试应用程序以测试验证规则时,只会出现红色边框。但是我在带有红色框的WPF应用程序的屏幕截图中看到了警告图标。我的老板要求我为我们的测试应用设置此类图标。

我试图查看wpf-samples:它们使用CSLA中的标准警告图标,而没有其他编码。我不知道为什么在尝试跟踪验证示例时为什么只有CSLA的红色边框而不是CSLA的警告图标。

P.S。我可以手动创建图标,但是我有严格的要求使用在验证错误时自动出现的标准图标。以下代码显示了我如何手动执行此操作:

    <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 :(得分:1)

除了输入控件周围的红色边框之外,WPF没有任何自动显示方式。

CSLA根本不显示任何内容。它通过使用Microsoft定义的IDataErrorInfo接口告诉WPF,存在验证错误。您所看到的是显示红色边框的默认WPF行为。

您可以通过创建新的XAML样式来自定义WPF如何显示验证错误。

但是,Csla.Xaml名称空间(如果您在UI项目中引用了CSLA-WPF NuGet包,则可用)包括一个名为PropertyStatus的WPF控件。此控件基于IDataErrorInfo界面和CSLA业务对象公开的其他元数据,了解如何显示错误,警告和信息图标以及工具提示。

要使用PropertyStatus控件,您可以将控件直接放入页面的XAML中,或创建XAML样式。您可以在CSLA参考应用程序ProjectTracker中看到使用此控件的示例。

答案 1 :(得分:0)

SystemIcons.Exclamation可能会给您所需的符号。需要将类型为Icon的对象转换为BitmapSource才能在xaml中使用。