![]() |
||||||||||||||||||||||||||||||||||||||||
Arkadaşlar Bu konumuzda Wpf Application ile Nasıl Uygulama Yapabiliriz ve Wpf'in Bize kazandırdığı ek özellikleri Sizlerle Tanıştıracağım.
Diğerleri Bildiğimiz için Yazmayı Gerek duymadım…
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Ebubekir Yazılım" Height="350" Width="525"> <Grid> <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="92,106,0,0" Name="button1" VerticalAlignment="Top" Width="75" /> </Grid> </Window> using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes;
namespace wpfye_Giris { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); }
private void button1_Click(object sender, RoutedEventArgs e) { if (checkBox1.IsChecked == true ) { MessageBox.Show("Bütün Butonlara Tıklanmış"); } else { MessageBox.Show("Lütfen Butonları Kontrol ediniz."); } } } } <Window x:Class="wpfye_Giris.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Ebubekir Yazılım" Height="350" Width="525"> <Grid> <Button Content="Tıkla" Height="23" HorizontalAlignment="Left" Margin="30,101,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" /> <CheckBox Content="İşaret" Height="16" HorizontalAlignment="Left" Margin="62,35,0,0" Name="checkBox1" VerticalAlignment="Top" /> <ComboBox Height="23" HorizontalAlignment="Left" Margin="133,101,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" ItemsSource="{Binding}"> <ComboBoxItem Background="#FFEF2828" BorderBrush="#FF4B3939" Foreground="#FF12E594" /> <ComboBoxItem Content=" Yazılım 4.Gurup"/> <ComboBoxItem Content=" Yazılım 4.Gurup"/> <ComboBoxItem Content=" Yazılım 4.Gurup"/> <ComboBoxItem Content=" Yazılım 4.Gurup"/> <ComboBoxItem Content=" Yazılım 4.Gurup"/> <ComboBoxItem Content=" Yazılım 4.Gurup"/> <ComboBoxItem Content=" Yazılım 4.Gurup"/> </ComboBox> </Grid> </Window> Bu makalede WPF’te kullanabileceğimiz efektlerin bize sağladığı kolaylıkları, neden kullanmamız gerektiğini ve nasıl kullanabileceğini incelemeye çalışacağım. Windows Presentation Foundation (WPF), bizlere daha önce Photoshop ve türevi programlarla resim üzerinde yapmaya alışık olduğumuz gölgelendirme, soluklaştırma, çerçeve renklendirme, doldurma gibi birçok efekti kendi kütüphanelerinden getirip istediğimiz her nesneye uygulayabilmemizi sağlıyor. Hem XAML hem C# kodlarıyla ulaşılan bu efektler System.Windows. Media.Effect veMicrosoft.Expression.Media.EffectDLL’lerinden çağırılıyor. Elbette kullanım oranı arttıkça gerek bileşen üreten şirketler, gerekse geliştiricilerin yazdığı DLL’ler kütüphanelerin zenginleşmesini sağlayacaktır. WPF’inefektleriyle birlikte bize sağladığı kolaylıkları kısaca özetlemek gerekirse: • Hem C#, hem XAML kodlarıyla ulaşılabilir ve yaratılabiliyor olması, • Hem Visual Studio hem ExpressionStudio ortamında kullanılabiliyor ve yaratılabiliyor olması, • ExpressionStudio ile kolay bir şekilde animasyon ve efekt yaratmamıza olanak sağlıyor olması, • Sunduğu efektlerin ‘Performans’ ya da ‘Kalite’ odaklı çalışabiliyor olması, • Window da dahil tüm nesnelere uygulanabiliyor olması. Buttonumuzu “Ebubekir Yazılım” Content’iyle oluşturduktan sonra efekt verme işlemine geçiyoruz. İlk efektimizin adı Content’ten anlaşılacağı üzere “DropShadowEffect”’tir. System.Windows. Media.Effect isimli kütüphanede yer alır ve altı farklı özelliğe sahiptir: • <DropShadowEffect/> etiketi, uygulanacak efekti temsil ediyor. (Bu efekteExpressionBlend 4’in Assets Effects DropShadowEffect kısmından da erişebilirsiniz.) ElbettekiDropShadowEffect göründüğü kadar sade değil, inceleyelim: • BlurRadius: Gölgenin dağılmasını, blurlaşmasını sağlar. Yayılacağı alanı belirler. • Color: Oluşturulacak gölgenin rengini belirler. • Direction: Gölgenin uygulanacağı alanı belirler. Nesnenin üstü, altı, sağı, solu gibi yerleşim yerini ayarlar. • Opacity: Gölgenin saydamlığını belirler. • ShadowDepth: Gölgenin nesneye olan yakınlığını uzaklığını belirler. Tüm bu efekt özelliklerini kullandıktan sonraki görüntü ve XAML çıktısı aşağıdaki gibidir: <Button.Effect> <DropShadowEffect BlurRadius="33" Color="Red" Direction="139" Opacity="0.825" ShadowDepth="8"/> </Button.Effect> </Button> BlurEffectefekti, uygulandığı nesneye adından anlaşılabileceği üzere blur efekti (soluklaştırma) uygular. System.Windows. Media.Effect isimli kütüphanede yer alır. Bu efektin üç özelliği vardır: <Button.Effect> <BlurEffect Radius="1" RenderingBias="Quality" KernelType="Box"/> </Button.Effect> </Button>
KernelType: Uygulanacağı nesnenin görünümüyle ilgili iki seçenek sunar; Box ve Gaussian’dır. Hoşunuza giden şekli kullanabilirsiniz. Swirl Swirl efekti, Microsoft.Expression.Media.Effect kütüphanesinde yer alır ve iki özelliğe sahiptir. Uygulandığı nesnenin iskeletini ve Content’ini istenilen yöne, istenilen oranda döndürmeye, eğip bükmeye yarar. Bu efekti de diğerlerinde olduğu gibi bir Button üzerinde uygulayacağız. Resim ve kod çıktısına bakalım ve açıklayarak devam edelim: <Button Content="Eğil salkım söğüt eğil" Height="172" HorizontalAlignment="Left" Name="button1" VerticalAlignment="Top" Width="206" Background="White" BorderBrush="#FF9A4545" > Ekran çıktısında da görünen “Eğil salkım söğüt eğil” adlı Zülfü Livaneli eseri aslında bir Button, resim değil. Yalnızca SwirlEfecti uygulanmış ve TwistAmount’ü yükseltmiş. Kırmızı olan kısımsa kenarlıkları. Alışık olduğumuz kenarlıklardan çok farklıya benziyor? TwistAmount: Uygulandığı nesnenin iskeletini döndürmeyi eğmeyi şekil vermeyi sağlar. Center: TwistAmount uygulandığında, uygulanacağı ve iskeletin oturacağı yerleşim alanını belirler.
Elbette bu efekti geliştirmeyi ve harika sonuçlar almayı hayal gücüne insafına bırakıyorum. J Pixelate Pixelateefekti, daha çok resimlerin pikselleriyle oynamamızı sağlayan bir efekttir. Ama bu efekti kullanmak için bir image nesnesine sahip olmak zorunda değiliz. Herhangi bir nesneye de uygulayabilirz. Diğerlerine nazaran en kısır özellikli efektPixelate efektidir. Microsoft.Expression.Media.Effect kütüphanesinde yer alır. Yalnızca tek bir özelliği vardır. Ekran ve XAML çıktısına baktıktan sonra açıklamaya çalışayım: <Image Height="246" HorizontalAlignment="Left" Margin="12,12,0,0" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="273" Source="/WPFTest;component/Images//Makaleler/Resimler/1000002520_koala.jpg" > Pixelation: Uygulandığı nesnenin pikselleriyle oynamamızı sağlar.
Efektlerle ilgili küçük bir ipucu da ExpressionStudio kullanmayanlar için: XAML kodlarıyla efekt uygulamak zor geliyorsa; örneğin Button nesnesinin XAML kodlarına gelelim ve şu kodları ekleyelim. <Button.Effect><DropShadowEffect/></Button.Effect>(DropShadowEffect zorunlu değildir. Diğer efektler için de geçerlidir.) Kodları ekledikten sonra DropShadowEffect etiketlerine tıklayalım ve Properties’a girelim. Properties’a girdiğimizde DropShadowEffect’e ait özellikler karşımıza çıkacaktır. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Window.Resources > <Style TargetType="{x:Type TextBox}"> <Style.Triggers > <Trigger Property=" IsFocused" Value="True"> <Setter Property="Background" Value="Cyan"/> </Trigger> <Trigger Property="IsMousOver" Value="True"> <Setter Property="Background " Value="Pink"/> </Trigger> </Style.Triggers> </Style> </Window.Resources> <Grid> <TextBox Height="33" HorizontalAlignment="Left" Margin="92,36,0,0" Name="textBox1" VerticalAlignment="Top" Width="153" /> </Grid>
</Window>
2.)Yöntem. Yeni Sitil Dosyamızı Açıyoruz. <Setter Property="Control.FontSize" Value=" 30"/> <Setter Property="Control.Background" Value="REd"/> </Style> Animasyonlar xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Kodla Rotate Animasyon" Height="250" Width="325"> <Grid> <Button Name="btnMerhaba" Width="75" Height="40" Content="Merhaba" Background="Black" Foreground="Gold" FontSize="14" FontWeight="Bold"> <Button.LayoutTransform> <TransformGroup> <RotateTransform x:Name="RTrans" Angle="0"/> <ScaleTransform x:Name="STrans" CenterX="0" CenterY="0" ScaleX="1" ScaleY="1"/> </TransformGroup> </Button.LayoutTransform> </Button> </Grid> </Window> using System.Collections.Generic; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using System.Windows.Media.Animation; // Animasyon tiplerinin yer aldığı isim alanıdır(Namespace)
namespace AnimasyonIslemleri { public partial class KodlaRotateAnimasyon : Window { private void AnimasyonuOlustur() { // Storyboard oluşturulur Storyboard strBrd = new Storyboard();
// Birinci DoubleAnimation tipi oluşturulur. // İlk parametre To değeridir ve burada 360 dereceyi işaret etmektedir. İkinci parametre ise Duration değeridir. DoubleAnimation dblAni1 = new DoubleAnimation(0, new Duration(TimeSpan.FromSeconds(1))); // Animasyon tipinin RTrans adına sahip elementin AngleProperty özelliğine uygulanacağı belirtilir. Storyboard.SetTargetName(dblAni1, "RTrans"); Storyboard.SetTargetProperty(dblAni1, new PropertyPath(RotateTransform.AngleProperty)); // Animasyon tipi Storyboard' a eklenir. strBrd.Children.Add(dblAni1);
// İkinci DoubleAnimation tipi oluşturulur. // İlk parametre To değeridir ve burada 2.5 katını işaret etmektedir. İkinci parametre ise Duration değeridir. Buna göre zaman çizgisinin ilk 1.5 saniyesi içerisinde Button bileşeninin ScaleX değeri 2.5 kat artmaktadır. DoubleAnimation dblAni2 = new DoubleAnimation(5.1, new Duration(TimeSpan.FromSeconds(24.6))); // Animayonun STrans isimli ScaleTransform elementi içerisindeki ScaleX özelliğine uygulanacağı belirtilir. Storyboard.SetTargetName(dblAni2, "STrans"); Storyboard.SetTargetProperty(dblAni2, new PropertyPath(ScaleTransform.ScaleXProperty)); // Animasyon tipi Storyboard' a eklenir. strBrd.Children.Add(dblAni2);
// Üçüncü DoubleAnimation tipi oluşturulur. // İlk parametre To değeridir ve burada 2.5 katını işaret etmektedir. İkinci parametre ise Duration değeridir. Buna göre zaman çizgisinin ilk 1.5 saniyesi içerisinde Button bileşeninin ScaleY değeri 2.5 kat artmaktadır. DoubleAnimation dblAni3 = new DoubleAnimation(1.9, new Duration(TimeSpan.FromSeconds(1.5))); // Animayonun STrans isimli ScaleTransform elementi içerisindeki ScaleY özelliğine uygulanacağı belirtilir. Storyboard.SetTargetName(dblAni3, "STrans"); Storyboard.SetTargetProperty(dblAni3, new PropertyPath(ScaleTransform.ScaleYProperty)); // Animasyon tipi Storyboard' a eklenir. strBrd.Children.Add(dblAni3);
// Zaman çizgisinin 3ncü saniyesine gelindiğinde Button kontrolünün ScaleX değeri ilk haline döner. DoubleAnimation dblAni4 = new DoubleAnimation(2, new Duration(TimeSpan.FromSeconds(3))); Storyboard.SetTargetName(dblAni4, "STrans"); Storyboard.SetTargetProperty(dblAni4, new PropertyPath(ScaleTransform.ScaleXProperty)); // Animasyon tipi Storyboard' a eklenir. strBrd.Children.Add(dblAni4);
// Zaman çizgisinin 3ncü saniyesine gelindiğinde Button kontrolünün ScaleY değeri ilk haline döner. DoubleAnimation dblAni5 = new DoubleAnimation(1, new Duration(TimeSpan.FromSeconds(3))); Storyboard.SetTargetName(dblAni5, "STrans"); Storyboard.SetTargetProperty(dblAni5, new PropertyPath(ScaleTransform.ScaleYProperty)); // Animasyon tipi Storyboard' a eklenir. strBrd.Children.Add(dblAni5);
// Mouse ile Button alanı üzerinde gelindiğinde animasyon başlatılır. btnMerhaba.MouseEnter += delegate(object sender, MouseEventArgs e) { /* İkinci parametre Storyboard' un kontrol edilebileceğini gösterir. Bir başka deyişle programatik olarak animasyonun durdurulması, duraksatılması ve benzeri işlemlerin yapılabilmesi sağlanır. */ strBrd.Begin(this, true); };
btnMerhaba.MouseLeave += delegate(object sender, MouseEventArgs e) { // Storyboard' un başlattığı animasyon çıkartılır. Dolayısıyla Button açısal konum ve büyüklük olarak ilk değerlerine döner. strBrd.Stop(this); }; }
public KodlaRotateAnimasyon() { InitializeComponent(); AnimasyonuOlustur(); } } }
|
![]() |