niedziela, 7 listopada 2010

Skiny w aplikacji WPF

Zmiana wyglądu naszej aplikacji (tzw. skiny) to jeden z częściej wykorzystywanych mechanizmów współczesnych aplikacji. Szare okienka ustępują coraz to bardziej rozbudowanym graficznie aplikacją.

Korzystanie ze skinów w WPF jest niezwykle proste.
Przejdę bezpośrednio do przykładu. Stworzymy nową aplikację WPF wykorzystując Visual Studio 2010.

Na formatkę położymy dwa przyciski:

Następnie tworzymy dwa słowniki:

Te dwa słowniki to RedTemplate oraz BlueTemplate. Same definicje słowników są w tym pokazie bardzo proste:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style TargetType="{x:Type Button}">
        <Setter Property="Background" Value="Blue" />
    </Style>
</ResourceDictionary>





Ustawiamy tylko jedną właściwość odpowiedzialną za kolor tła przycisku. Teraz należy jeszcze tylko dodać odpowiednie zdarzenia, które uaktywnią odpowiedni kolor po kliknięciu w przycisk:

        private ResourceDictionary currentColors;
        private Collection<ResourceDictionary> appResources;

        public MainWindow()
        {
            InitializeComponent();

            //zapisujemy aktualnie używane słowniki
            appResources = App.Current.Resources.MergedDictionaries;
        }

        private void btnRed_Click(object sender, RoutedEventArgs e)
        {
            if (currentColors != null)
            {
                appResources.Remove(currentColors);
            }

            currentColors = (ResourceDictionary)App.LoadComponent(new Uri(@"RedTemplate.xaml", UriKind.Relative));

            if ((ResourceDictionary)App.LoadComponent(new Uri(@"RedTemplate.xaml", UriKind.Relative)) != null)
            {
                appResources.Add((ResourceDictionary)App.LoadComponent(new Uri(@"RedTemplate.xaml", UriKind.Relative)));
            }
        }

        private void btnBlue_Click(object sender, RoutedEventArgs e)
        {
            if (currentColors != null)
            {
                appResources.Remove(currentColors);
            }

            currentColors = (ResourceDictionary)App.LoadComponent(new Uri(@"BlueTemplate.xaml", UriKind.Relative));

            if ((ResourceDictionary)App.LoadComponent(new Uri(@"BlueTemplate.xaml", UriKind.Relative)) != null)
            {
                appResources.Add((ResourceDictionary)App.LoadComponent(new Uri(@"BlueTemplate.xaml", UriKind.Relative)));
            }
        }

Jak widać nic trudnego, a można dokonać wiele więcej zmian (np. wyglądu przycisku itp.).
Bardzo ciekawy przykład można zobaczyć w filmiku Jared Bienz-a dostępnego pod adresem:
klik

Brak komentarzy:

Prześlij komentarz