wpf資料驗證

來源:互聯網
上載者:User

引用:

http://blog.joycode.com/vbcti/archive/2008/09/17/115273.joy

[原文作者]:Beth Massi

[原文連結]:Displaying Data Validation Messages in WPF

 

以下是我特別關注的內容:

 

設定自訂有效性驗證Style
   我們顯然希望能讓使用者知道這裡的問題怎麼解決.讓我們來做一些簡單的例子在ToolTip中來顯示錯誤資訊. 現在我們能在Window.Resources部分中建立一個Style,然後應用於這個Form中的TextBox中. 這個 Style建立一個觸發器,當Validation.HasError變成True的時候 ,用來設定ToolTip屬性為有效性驗證的錯誤資訊 .
<Window.Resources>
    <Style TargetType="TextBox">
        <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>
</Window.Resources>
 
 
   現在當我們再次運行這個程式,當滑鼠置於TextBox上的時候你能看到顯示在ToolTip裡的有效性驗證資訊. 這比之前的好了些 ! 但是這個辦法只適用於TextBox. 那像 checkBox,ComboBox等這樣的控制項又怎麼辦呢 ? 我們需要把這些都聲明在一個適應於整個應用程式的地方 .沒問題,我們可以把這種Style貼在Application.Resources. 我們也能指定 TargetType=”Control”,這樣我們就能定義另外的適合基於這種Style的其他控制項的Style.開啟Application.xaml,將它們加入Resources部分:
 
<Application.Resources>
    <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)[0].ErrorContent}"/>
            </Trigger>
        </Style.Triggers>
    </Style>
    <Style TargetType="TextBox" BasedOn="{StaticResource myErrorTemplate}" />
    <Style TargetType="CheckBox" BasedOn="{StaticResource myErrorTemplate}" />
    <Style TargetType="ComboBox" BasedOn="{StaticResource myErrorTemplate}" />
</Application.Resources>
    我們只需指定模板的x:Key,然後就能在繼承的Style上設定BasedOn屬性了 . 現在整個應用程式的控制項都能應用這種Style了。
    替換整個的錯誤模板
    到目前為止,我們所做的是指定一個Style觸發器了. 預設的WPF錯誤模板仍然在使用中因為我們還是看到控制項的紅邊框. 這裡我們能在Applicaion.Resource定義一個新的錯誤模板來完全的改變這個錯誤模板.讓我們來通過一個簡單的樣本來示範創立一個在控制項上顯示一般錯誤資訊的錯誤模板.在Style 中的Trigger上面的部分(我們會把ToolTip資訊放置於那兒),我們設定Validation.ErrorTemplate屬性的值為我們自己的控制項範本。
 
<Style TargetType="Control" x:Key="myErrorTemplate">
        <Setter Property="Validation.ErrorTemplate">
            <Setter.Value>
                <ControlTemplate>
                    <TextBlock Foreground="Red" Text="DOH! Thank you for trying."/>
                </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>
      現在當我們再次運行,我們仍然可以看到我們的ToolTip當我們將滑鼠放在控制項上的時候.但是我們將在我們自己的控制項範本中的TextBlock覆蓋了原來的控制項,注意:現在已經沒有紅色的邊框了:
 

    好的, 我承認這是一個蹩腳的樣本,.問題(除了這諷刺的訊息)是TextBlock確實覆蓋了那控制項,你必須將滑鼠置於邊緣來顯示ToolTip. 另外一個問題當然是如果我們開始再次輸入欄位值,直到我們輸入完畢之後那個資訊才會消失,這是很不方便的.
   你可以插入一個DockPanel到控制項範本裡面,然後把TextBlock停靠在右邊以在控制項後面顯示文本 (這裡讓我們只顯示一個星號),如果說你仍然想有紅色邊框在控制項周圍,我們可以在我們的XAML中為錯誤模板的Setter.Value設定一個叫AdornedElementPlaceholder的特別元素:
<Setter Property="Validation.ErrorTemplate">
    <Setter.Value>
        <ControlTemplate>
            <DockPanel LastChildFill="True">
                <TextBlock DockPanel.Dock="Right"
                        Foreground="Red"
                        FontSize="11pt"
                        FontWeight="Bold">*
                </TextBlock>
                <Border BorderBrush="Red" BorderThickness="1">
                    <AdornedElementPlaceholder Name="myControl"/>
                </Border>
            </DockPanel>
        </ControlTemplate>
    </Setter.Value>
</Setter>
 

 

  

     在WPF中用.net framework 3.5來驗證你的資料對象的有效性跟之前用IdataErrorInfo介面的Winform是一樣的.然而,WPF式樣和控制項範本可以非常方便的顯示可視線索給使用者.如果你能發揮想象,你就可以用WPF來做.    

     享受這一切吧!
 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/zxqtiger/archive/2010/06/22/5686869.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.