Herkese merahaba,
Bu makalemde Validation’ın devamını anlatıyor olacağım. Validation hakkındaki bir önceki makaleme buradan ulaşabilirsiniz.
İlk olarak MainPage.xaml dosyamızda bir takım değişiklikler yapıyoruz. Textboxların Text özelliklerinin içerisine “NotifyonValidationError=True” ifadesini ekliyoruz. Bu sayede textbox’ın içeriği ile ilgili bir hata varsa mouse’u textbox’ın üzerine getirdiğimizde bize hata mesajımızı da gösteriyor.
[xaml]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" xmlns:System="clr-namespace:System;assembly=mscorlib" x:Class="Ders_1.MainPage" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400" Width="Auto" Height="Auto" MinWidth="640" MinHeight="480" xmlns:dataFormToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm.Toolkit"> <Grid x:Name="LayoutRoot" Background="White"> <StackPanel x:Name="stack_sol" HorizontalAlignment="Center" Width="82" Margin="157,65,360,195"> <sdk:Label x:Name="lbl_isim" HorizontalAlignment="Left" Content="İsim:" Height="30"/> <sdk:Label x:Name="lbl_soyisim" HorizontalAlignment="Left" Content="Soyisim:" Height="30"/> <sdk:Label x:Name="lbl_dogumtarihi" Content="Doğum Tarihi:" Height="30"/> <sdk:Label x:Name="lbl_dogumyeri" Content="Doğum Yeri:" Height="30"/> <sdk:Label x:Name="lbl_okul" Content="Okul:" Height="30"/> <sdk:Label x:Name="lbl_bolum" Content="Bölüm:" Height="30"/> <sdk:Label x:Name="lbl_telefon" Content="Telefon:" Height="30"/> </StackPanel> <sdk:Label x:Name="lbl_ust" VerticalAlignment="Top" Content="Kullanici Kaydina Hoşgeldiniz" FontSize="18.667" HorizontalAlignment="Center"/> <StackPanel x:Name="stack_sag" d:LayoutOverrides="VerticalAlignment" Margin="264,65,176,195" Width="200"> <TextBox x:Name="txt_isim" TextWrapping="Wrap" Height="30" Text="{Binding isim,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> <TextBox x:Name="txt_soyisim" TextWrapping="Wrap" Height="30" Text="{Binding soyisim,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> <sdk:DatePicker Name="dogumtarihi" Height="30"/> <TextBox x:Name="txt_dogumyeri" TextWrapping="Wrap" Height="30" Text="{Binding dogumyeri,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> <TextBox x:Name="txt_okul" TextWrapping="Wrap" Height="30" Text="{Binding okul,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> <TextBox x:Name="txt_bolum" TextWrapping="Wrap" Height="30" Text="{Binding bolum,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> <TextBox x:Name="txt_telefon" TextWrapping="Wrap" Height="30" Text="{Binding telefon,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> </StackPanel> <Button x:Name="btn_kaydet" Content="Kaydet" VerticalAlignment="Top" Margin="220,301,210,0" Height="30" HorizontalAlignment="Center" Width="188"/> </Grid> </UserControl> |
Sonrasında yine MainPage.xaml dosyamıza “BindingValidationError” ifadesini ekliyoruz.
[xaml]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" xmlns:System="clr-namespace:System;assembly=mscorlib" x:Class="Ders_1.MainPage" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400" Width="Auto" Height="Auto" MinWidth="640" MinHeight="480" xmlns:dataFormToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm.Toolkit"> <Grid x:Name="LayoutRoot" Background="White" BindingValidationError="LayoutRoot_BindingValidationError"> <StackPanel x:Name="stack_sol" HorizontalAlignment="Center" Width="82" Margin="157,65,360,195"> <sdk:Label x:Name="lbl_isim" HorizontalAlignment="Left" Content="İsim:" Height="30"/> <sdk:Label x:Name="lbl_soyisim" HorizontalAlignment="Left" Content="Soyisim:" Height="30"/> <sdk:Label x:Name="lbl_dogumtarihi" Content="Doğum Tarihi:" Height="30"/> <sdk:Label x:Name="lbl_dogumyeri" Content="Doğum Yeri:" Height="30"/> <sdk:Label x:Name="lbl_okul" Content="Okul:" Height="30"/> <sdk:Label x:Name="lbl_bolum" Content="Bölüm:" Height="30"/> <sdk:Label x:Name="lbl_telefon" Content="Telefon:" Height="30"/> </StackPanel> <sdk:Label x:Name="lbl_ust" VerticalAlignment="Top" Content="Kullanici Kaydina Hoşgeldiniz" FontSize="18.667" HorizontalAlignment="Center"/> <StackPanel x:Name="stack_sag" d:LayoutOverrides="VerticalAlignment" Margin="264,65,176,195" Width="200"> <TextBox x:Name="txt_isim" TextWrapping="Wrap" Height="30" Text="{Binding isim,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> <TextBox x:Name="txt_soyisim" TextWrapping="Wrap" Height="30" Text="{Binding soyisim,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> <sdk:DatePicker Name="dogumtarihi" Height="30"/> <TextBox x:Name="txt_dogumyeri" TextWrapping="Wrap" Height="30" Text="{Binding dogumyeri,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> <TextBox x:Name="txt_okul" TextWrapping="Wrap" Height="30" Text="{Binding okul,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> <TextBox x:Name="txt_bolum" TextWrapping="Wrap" Height="30" Text="{Binding bolum,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> <TextBox x:Name="txt_telefon" TextWrapping="Wrap" Height="30" Text="{Binding telefon,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> </StackPanel> <Button x:Name="btn_kaydet" Content="Kaydet" VerticalAlignment="Top" Margin="220,301,210,0" Height="30" HorizontalAlignment="Center" Width="188" /> </Grid> </UserControl> |
LayoutRoot_BindingValidationError eventının içerisine aşağıdaki kod bloğunu ekliyoruz.
[C#]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace Ders_1 { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); Kullanici kullanici = new Kullanici(); LayoutRoot.DataContext = kullanici; } private void LayoutRoot_BindingValidationError(object sender, ValidationErrorEventArgs e) { if (e.Action == ValidationErrorEventAction.Added) { (e.OriginalSource as Control).Background = new SolidColorBrush(Colors.Yellow);//hatalı ise textbox'ın arkaplan rengini sarı yapıyoruz. ToolTipService.SetToolTip((e.OriginalSource as TextBox), e.Error.Exception.Message); } if (e.Action == ValidationErrorEventAction.Removed) { (e.OriginalSource as Control).Background = new SolidColorBrush(Colors.White);//hatalı değilse textbox'ın arkaplan rengini beyaz yapıyoruz. ToolTipService.SetToolTip((e.OriginalSource as TextBox), null); } } } } |
Buraya kadar geldiyseniz programımızı çalıştıralım ve bakalım.
Bu kısma kadar gördüğünüz gibi notify ve textboxın arka plan rengini değiştirdik. Bu hataları bir “ValidationSummary“ içerisinde listeyelim.Bunun için öncelikle aşağıdaki gibi projemize sağ tıklayıp Add Referance->System.Windows.Controls.Data.Input yolunu izleyerek DataInput.dll dosyamızı eklemiş oluyoruz.Daha sonra MainPage.xaml sayfamızda “xmlns:db=”clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Input” ifadesini aşağıdaki gibi ekliyoruz.
Ardından ValudationSummary’i oluşturuyoruz. Bunun içinde “db:ValidationSummary Width=”300″ Margin=”0,346,44,27″” ifadesini aşağıdaki gibi ekliyoruz.
[xaml]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" xmlns:System="clr-namespace:System;assembly=mscorlib" x:Class="Ders_1.MainPage" xmlns:db="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Input" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400" Width="Auto" Height="Auto" MinWidth="640" MinHeight="480" xmlns:dataFormToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm.Toolkit"> <Grid x:Name="LayoutRoot" Background="White" BindingValidationError="LayoutRoot_BindingValidationError"> <StackPanel x:Name="stack_sol" HorizontalAlignment="Center" Width="82" Margin="157,65,360,195"> <sdk:Label x:Name="lbl_isim" HorizontalAlignment="Left" Content="İsim:" Height="30"/> <sdk:Label x:Name="lbl_soyisim" HorizontalAlignment="Left" Content="Soyisim:" Height="30"/> <sdk:Label x:Name="lbl_dogumtarihi" Content="Doğum Tarihi:" Height="30"/> <sdk:Label x:Name="lbl_dogumyeri" Content="Doğum Yeri:" Height="30"/> <sdk:Label x:Name="lbl_okul" Content="Okul:" Height="30"/> <sdk:Label x:Name="lbl_bolum" Content="Bölüm:" Height="30"/> <sdk:Label x:Name="lbl_telefon" Content="Telefon:" Height="30"/> </StackPanel> <sdk:Label x:Name="lbl_ust" VerticalAlignment="Top" Content="Kullanici Kaydina Hoşgeldiniz" FontSize="18.667" HorizontalAlignment="Center"/> <StackPanel x:Name="stack_sag" d:LayoutOverrides="VerticalAlignment" Margin="264,65,176,195" Width="200"> <TextBox x:Name="txt_isim" TextWrapping="Wrap" Height="30" Text="{Binding isim,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> <TextBox x:Name="txt_soyisim" TextWrapping="Wrap" Height="30" Text="{Binding soyisim,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> <sdk:DatePicker Name="dogumtarihi" Height="30"/> <TextBox x:Name="txt_dogumyeri" TextWrapping="Wrap" Height="30" Text="{Binding dogumyeri,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> <TextBox x:Name="txt_okul" TextWrapping="Wrap" Height="30" Text="{Binding okul,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> <TextBox x:Name="txt_bolum" TextWrapping="Wrap" Height="30" Text="{Binding bolum,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> <TextBox x:Name="txt_telefon" TextWrapping="Wrap" Height="30" Text="{Binding telefon,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"/> </StackPanel> <Button x:Name="btn_kaydet" Content="Kaydet" VerticalAlignment="Top" Margin="220,301,210,0" Height="30" HorizontalAlignment="Center" Width="188" Click="btn_kaydet_Click" /> <db:ValidationSummary Width="300" Margin="0,346,44,27"/> </Grid> </UserControl> |
Ve işlem tamamdır.:) Projemizi derleyip çalıştırdığımızda aşağıdaki gibi bir ekran görüntüsü alıyoruz.
Validation konusunda şimdilik yazacaklarım bu kadar. Umarım faydasını görürsünüz.Bir sonraki makalemde görüşmek üzere…