poniedziałek, wrzesień 28, 2009

Do zobaczenia na MTS 2009....

Jak ten czas szybko leci, jak dziś pamiętam MTS'08 a tu już jutro kolejna edycja.
Poprzedni MTS uważam za bardzo udany nawet z małymi wpadkami, które były. W tym roku, aż takich emocji przy wyborze sesji nie było, ale mam nadzieję, że i tak sesję będą ciekawe. Do zobaczenia na MTS...a potem na C@N

Dla ciekawskich - mój harmonogram.

Wtorek 29 września 2009
  • Silverlight – przyszłość aplikacji biznesowych
  • Zabezpieczenie i „odbezpieczanie” kodu .NET
  • .NET 4.0 Inside/Out – CLR 4.0, DLR i ich wpływ na sposób programowania
  • Co nowego w Silverlight 3?

Środa 30 września 2009
  • Windows 7 dla deweloperów
  • Czy ASP.NET MVC oznacza zmierzch "klasycznego" ASP.NET?
  • How to write application for Microsoft Surface
  • Entity Framework w aplikacjach

środa, wrzesień 16, 2009

Wymuszanie plusów...

Dziś zaczniemy cytatem. Jak ktoś wie z czego to i kto to mówi to pogratulować dobrego gustu :)


Czemu nie ma prądu? Bo u nas nie ma minusów, tylko same plusy...

A czemu taki cytat? A no dlatego, że chciałem wykonać wydawałoby się banalną czynność wyświetlenia wartości double z '+' z przodu.

Nic prostszego powiecie. Szybkie zerknięcie do dokumentacji formatów, przy żadnym nie widzę, aby było coś napisane, odnośnie wyświetlania '+'. No niech będzie zrobię swój...

Chwila kodowania i mam:


double plus = +123.5;         


var nf = new NumberFormatInfo {PositiveSign = "+"};


Console.WriteLine(plus.ToString(nf));


Jednak wynik niezadowalający...

Czyżbym jednak coś źle robił. Zobaczmy co o tej właściwości pisze MSDN.

This property is used only for parsing numeric strings, not for formatting.

Pogrubienie moje

Czyli rzeczywiście podejście złe. Zobaczmy jednak czy podobnie piszą o NegativeSign.

Szybkie wertowanie "stron" i zero komentarza. Weryfikacja w kodzie potwierdza, iż znak dla liczb ujemnych możemy zmienić. Nie ma to jak spójny framework :/.

No cóż, nadal problem jest. Jak zatem możemy uzyskać tak prostą czynność jak wyświetlenie znaku '+' przed liczbą?

Musimy podjeść nieco z drugiej strony.


double plus = +123.5;         


Console.WriteLine(string.Format("{0:+0.#####;-0.#####}", plus));


Jeśli ktoś nie rozumie tego zapisu formatu to tylko powiem, że pierwsza maska stosuje się do wartości >=0 a druga <0. Więcej na ten temat można poczytać w MSDN - Custom Numeric Format Strings, rozdział The ";" Section Separator.

Miłego czytania :)

sobota, wrzesień 05, 2009

WPF - StyleSelector

Kolejna "nowość" (dla mnie) w WPF. Wiadomo, że możemy tworzyć style dla wszystkich elementów naszego UI. Jednak WPF daje nam jeszcze większą możliwość dostosowania wyglądu - w tym przypadku tylko kontrolek, które są kontenerami dla innych. Jak to uzyskać? Wystarczy skorzystać z klasy StyleSelector.

Zacznijmy od stworzenia naszego Selectora.


public class MyStyleSelector : StyleSelector


{


    public override Style SelectStyle(object item, DependencyObject container)


    {


        var style = new Style(typeof (ListBoxItem));


        var setter = new Setter {Property = Control.BackgroundProperty};


        var listBox = ItemsControl.ItemsControlFromItemContainer(container);


        var index = listBox.ItemContainerGenerator.IndexFromContainer(container);


 


        setter.Value = index%2 == 0 ? Brushes.LightBlue : Brushes.Beige;           


        style.Setters.Add(setter);


        return style;


    }


}


Co się dzieje w naszej metodzie? Tworzymy obiekt Style i ustawiamy typ, którego będzie dotyczył (w naszym przypadku ListBoxItem). Następnie tworzymy Setter definiując jaka właściwość nas interesuje (Background). Następnie za pomocą helpera (ItemsControl) pobieramy kontener i badamy jego indeks. W zależności od jego pozycji ustawiamy tło.

Co nam pozostaje to użycie naszego Selectora w XAML'u.

Dodajemy namespace do naszej klasy:


<Window x:Class="StyleSelectorDemo.Window1"


  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"


  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"


  xmlns:StyleSelectorDemo="clr-namespace:StyleSelectorDemo"


  Title="Window1" Height="300" Width="300">



Dodajemy element do słownika zasobów:


<Window.Resources>


    <StyleSelectorDemo:MyStyleSelector x:Key="myStyleSelector" />


</Window.Resources>



No i samo użycie:


<ListBox ItemContainerStyleSelector="{DynamicResource myStyleSelector}">


    <ListBoxItem>1</ListBoxItem>


    <ListBoxItem>2</ListBoxItem>


    <ListBoxItem>3</ListBoxItem>


    <ListBoxItem>4</ListBoxItem>


</ListBox>


Możemy użyć także StaticResource - zależy od tego czy nasz styl może się zmieniać dynamicznie i czy chcemy aby te zmiany były odwzorowane.

Efekt końcowy....(działający także w trybie Design)