İpinUcu ~ 100 – WPF’te Height-Width vs ActualHeight-ActualWidth

Öncelikle WPF ile ilgili 100. ipucumuz Türkçemize hayırlı olsun ^^

WPF’te bildiğiniz üzere width yada height özelliklerine değer girmek zorunda değiliz. Örneğin bir WrapPanel’in içine iki tane TextBlock koysak ve birkaç satır yazı yazsak pencerenin boyutuyla birlikte bu textler de büyüyecek (aslında doğrudan WrapPanel textleri de büyütemiyor. ViewBox kullanılmalı :)) Dönelim konuya:

<StackPanel>

<Button Content="Mehmet KAPLAN" HorizontalAlignment="Stretch"  />

</StackPanel>

Biz bu XAML kodlarıyla uygulamamızı çalıştırdığımızda Window’un height ve width bilgileriyle birlikte button şekil alacak. Peki bu width ve height’e kod tarafında ihtiyacımız olursa? Eğer buttonun kod tarafında witdh ve heighte bakmak isterseniz NaN olarak göreceksiniz. WPF’te bu bilgiler Witdh ve Height verilmemişse ActualHeight ve ActualWidth adı altında tutuluyor ve değerler Layout yüklendikten sonra değişiyor. Elbette bu özellikler de double türünde.

Umarım bir işinize yarar ^^

İpinUcu ~ 99 – WPF’te Kayan Yazı Animasyonu (marquee – scroll text)

Nedendir bilmem halen güzeller güzeli WPF’in animasyon olanaklarına alışamadık, ısınamadık ve bununla ilgili var denecek kadar bile kaynak oluşturamadık. Neyse ki dünyanın bir yerlerinde insanlar halen yaptıkça paylaşıyorlar 🙂

Doğrudan kayan yazı için XAML’a bakıyoruz:

<StackPanel Orientation=”Horizontal” Margin=”0,0,0,0″>

    <StackPanel.RenderTransform>
        <TranslateTransform x:Name="transferText" X="-40"/>
    </StackPanel.RenderTransform>
    <StackPanel.Triggers>
        <EventTrigger RoutedEvent="StackPanel.Loaded">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation From="0" To="-900" Duration="00:00:10"
                      Storyboard.TargetProperty="X"
                      Storyboard.TargetName="transferText"
                      RepeatBehavior="Forever"/>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </StackPanel.Triggers>
    <TextBlock FontSize="25"  x:Name="txtKron" Margin="10,0,7,0"/>
</StackPanel>

Böylece StackPanel içinde yer alan TextBlock ve daha niceleri kayıp gidecektir 🙂

Bu animasyon bir kenarda dursun. Şimdi bu kaydırma işlemi sırasında diyelim ki yazının bir kısmı kayboldu ve kaybolan kısım arkasından çıkıp gelsin istiyoruz. Yani Nokia’nın meşhur kara yılanı gibi 🙂

Buyrun:

XAML

<Window x:Class="WpfApplication9.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication9"
        Title="MainWindow" Height="83" Width="222" Name="UI" Tag="Tol Level">
    <StackPanel Orientation="Horizontal" x:Name="stack">
        <StackPanel.Resources>
            <local:NegatingConverter x:Key="NegatingConverter" />
            <Storyboard x:Key="slide">
                <DoubleAnimation From="0" To="{Binding Width, ElementName=canvas, Converter={StaticResource NegatingConverter}}" Duration="00:00:10"
                      Storyboard.TargetProperty="X"
                      Storyboard.TargetName="transferCurreny"
                      RepeatBehavior="Forever"/>
            </Storyboard>
        </StackPanel.Resources>
        <StackPanel.RenderTransform>
            <TranslateTransform x:Name="transferCurreny" X="0"/>
        </StackPanel.RenderTransform>
        <StackPanel.Triggers>
            <EventTrigger RoutedEvent="StackPanel.Loaded">
                <BeginStoryboard Storyboard="{StaticResource slide}" />
            </EventTrigger>
            <EventTrigger RoutedEvent="StackPanel.SizeChanged">
                <BeginStoryboard Storyboard="{StaticResource slide}" />
            </EventTrigger>
        </StackPanel.Triggers>
        <Canvas x:Name="canvas" Width="{Binding ActualWidth, ElementName=stack}">
            <TextBlock Text="StackOverflow" FontSize="25"  x:Name="txtKron" Canvas.Left="0"/>
            <TextBlock Text="{Binding Text, ElementName=txtKron}" FontSize="25" Canvas.Left="{Binding Width, ElementName=canvas}"/>
        </Canvas>
    </StackPanel>
</Window>

C#

public class NegatingConverter : IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value is double)
            {
                return -((double)value);
            }
            return value;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value is double)
            {
                return +(double)value;
            }
            return value;
        }
    }

Lütfen c# kodlarını namespace’in altında tutunuz. Sınıfın altında oluşturursanız olmayacaktır.

Yılan örneği için teşekkürler; http://stackoverflow.com/questions/15323163/wpf-marquee-text-animation

Kolaylıklar diliyorum.

İpinUcu ~ 98 – WPF Window’da Simge Durumuna Küçültme, Ekranı Kaplama ve Kapatma Butonlarını Gizlemek

Merhabalar!

Uzuun bir aradan sonra WPF ile haşır neşir olmam gerekti ve bu süreçte WPF’in hali hazırda bize sunmadığı ama sınırları zorlayarak yapabileceğimiz birkaç özelliği gerekti. Bunlardan bir tanesi close, maximazed ve minimized buttonlarını gizlemek!

Bunun için söz konusu formun C# tarafında şu eklemeyi yapıyoruz:

private const int GWL_STYLE = -16;
private const int WS_SYSMENU = 0x80000;
[DllImport(“user32.dll”, SetLastError = true)]
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport(“user32.dll”)]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);

Window_Loaded olayına da şunları ekliyoruz:

var hwnd = new WindowInteropHelper(this).Handle;
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_SYSMENU);

Bu yazdığım kodlar şu kütüphanelere ihtiyaç duyacağından otomatik olarak sunmazsa diye paylaşıyorum:

using System.Windows.Interop;

using System.Runtime.InteropServices;

Yazdığımız kodlar yalnızca sağ üst köşedeki butonları kaldırdığından doğal olarak kenarlıkların da (border) kalkmasını isteyebiliriz. Bunun için XAML tarafında Window’un WindowsStyle özelliğini None yapıyoruz.

XAML

 WindowStyle=”None”

Böylece güle güle kullanabiliriz. ^^

Kaynaklar: http://stackoverflow.com/questions/743906/how-to-hide-close-button-in-wpf-window

http://winsharp93.wordpress.com/2009/07/21/wpf-hide-the-window-buttons-minimize-restore-and-close-and-the-icon-of-a-window/

İpinUcu ~ 99 – WPF’te GridSplitter Kullanımı

WPF’te GridSplitter Kullanımı için öncelikle WPF’teki Grid’i anlamak gerek. Konuyla ilgili gerekli bilgiye wpftutorial’dan ulaşabilirsiniz: http://www.wpftutorial.net/GridLayout.html

Ayrıca takiben aşağıdaki bağlantılardan da yararlanarak GridSplitter’ın hakkını verebilir hale gelebilirsiniz =]

http://wpf.2000things.com/2011/12/23/457-use-a-gridsplitter-to-let-a-user-change-row-or-column-size-in-a-grid/

http://www.ehow.com/how_4546867_use-gridsplitter-wpf.html

http://www.youtube.com/watch?v=hKZKbPrNL8w

 

İpinUcu ~ 98 – WPF & Silverlight Animasyon Örnekleri 7

WPF ve Silverlight Animasyon Örneklerine bir katkı da Mike Hilberg’den geldi! Storyboard’un kullanımını anlamak adına yararlı olabileceğine inandığım, güzel bir animasyon örneği:

A Custom Storyboard Component in XAML

İpinUcu ~ 97 – WPF’te Dikey TextBlock Kullanımı

WPF’te Dikey TextBlock Kullanımı için LayoutTransform ile oynamak yeterli olacaktır. XAML’a bakalım:

    <TextBlock Text="Mehmet KAPLAN">
            <TextBlock.LayoutTransform>
                <RotateTransform Angle="-270"/>
            </TextBlock.LayoutTransform>
        </TextBlock>

Buna göre Mehmet KAPLAN yazısı dikey olarak yazılacaktır. Tam tersi şekilde olsun isterseniz -270 yerine 270 yazmanız yeterli olur. Aynı kodları Label için de kullanabilirsiniz.

Haydi kolay gelsin.

İpinUcu ~ 96 – WPF Application.Current Özelliği

WPF Application.Current özelliği WPF’teki geçerli Application’a erişmek için kullanılır.

Bir önceki yazımda paylaştığım ShutdownMode değiştirme örneğine bakalım:

Application app1= Application.Current;
app1.ShutdownMode = ShutdownMode.OnLastWindowClose;

Buna göre var olan Application’ndaki ShutdownMode’a erişebiliyoruz.  Ayrıca pencereler arası veri taşıma işlemleri için de bunu kullanabiliriz. Bununla ilgili örneği aşağıdaki bağlantıdan görebilirsiniz:

http://stackoverflow.com/questions/2219097/how-can-i-access-one-windows-control-richtextbox-from-another-window-in-wpf

Aynı konuyla ilgili Daron YÖNDEM’in de bir yazısı bulunmakta:

http://daron.yondem.com/tr/post/c710f64b-5f07-45ae-936a-243943eb786a

Söz konusu konunun MSDN sayfası: http://msdn.microsoft.com/tr-tr/library/system.windows.application.current.aspx

Haydi kolay gelsin.

%d blogcu bunu beğendi: