WPF驗證錯誤顯示


WPF 顯示驗證錯誤的默認方式是在控件周圍繪制紅色邊框。通常需要對此方法進行自定義,以通過其他方式來顯示錯誤。而且,默認情況下不會顯示與驗證錯誤關聯的錯誤消息。常見的要求是僅當存在驗證錯誤時才在工具提示中顯示錯誤消息。通過將 Styles 和一組與驗證關聯的附加屬性進行組合,可以相當輕松地自定義驗證錯誤顯示。

添加顯示錯誤文本的工具提示非常簡單。只需定義一個應用於輸入控件的 Style,每當存在驗證錯誤時,它便將該控件上的 ToolTip 屬性設置為驗證錯誤文本。若要對此提供支持,需要使用兩個附加屬性:Validation.HasError 和 Validation.Errors。下面演示了一個針對 TextBox 類型並設置工具提示的 Style:

 1 <Style TargetType="TextBox">
 2   <Style.Triggers>
 3     <Trigger Property="Validation.HasError" 
 4              Value="True">
 5       <Setter Property="ToolTip">
 6         <Setter.Value>
 7           <Binding 
 8             Path="(Validation.Errors).CurrentItem.ErrorContent"
 9             RelativeSource="{x:Static RelativeSource.Self}" />
10         </Setter.Value>
11       </Setter>
12     </Trigger>
13   </Style.Triggers>
14 </Style>

 

您可以看到,Style 只包含 Validation.HasError 附加屬性的屬性觸發器。當 Binding 更新其源對象屬性且驗證機制生成錯誤時,HasError 屬性會設置為 true。這種情況可能源自異常、ValidationRule 或 IDataErrorInfo 調用。該 Style 隨后使用 Validation.Errors 附加屬性,該屬性會在存在驗證錯誤時包含一個錯誤字符串集合。可以使用該集合類型的 CurrentItem 屬性來僅獲取集合中的第一個字符串。也可以設計為將數據綁定到集合,並為面向列表的控件中的每一項顯示 ErrorContent 屬性。

若要將控件的默認驗證錯誤顯示更改為紅色邊框之外的內容,需要將 Validation.ErrorTemplate 附加屬性設置為要自定義的控件上的新模板。在示例應用程序中,將在存在錯誤的每個控件右側顯示一個小的紅色漸變圓形,而不是顯示紅色邊框。為此,可定義用作 ErrorTemplate 的控件模板。

 1 <ControlTemplate x:Key="InputErrorTemplate">
 2   <DockPanel>
 3     <Ellipse DockPanel.Dock="Right" Margin="2,0" 
 4              ToolTip="Contains invalid data"
 5              Width="10" Height="10">
 6       <Ellipse.Fill>
 7         <LinearGradientBrush>
 8           <GradientStop Color="#11FF1111" Offset="0" />
 9           <GradientStop Color="#FFFF0000" Offset="1" />
10         </LinearGradientBrush>
11       </Ellipse.Fill>
12     </Ellipse>
13     <AdornedElementPlaceholder />
14   </DockPanel>
15 </ControlTemplate>

 

若要將該控件模板掛接到某個控件,只需設置該控件的 Validation.ErrorTemplate 屬性,您可以通過 Style 再次執行此操作:

1 <Style TargetType="TextBox">
2   <Setter Property="Validation.ErrorTemplate" 
3     Value="{StaticResource InputErrorTemplate}" />
4   ...
5 </Style>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM