(linkedin) (delicious)

    Liukuva WPF-paneeli WinForms-sovellukseen

    Olet varmaan joskus huomannut Windows-sovelluksia käyttäessäsi sulavasti näyttöön ilmestyviä toimintopaneeleja tai ilmoitusruutuja, jotka liukuvat hiljalleen piiloon. Tämän kaltainen käyttöliittymäkomponenttien animointi on peräisin Microsoft:n kehittämästä WPF-käyttöliittymätekniikasta, jonka tarkoituksena on ulkoisesti tarkasteltuna tarjota käyttäjilleen entistäkin rikkaampia ja mukautuvampia käyttöliittymiä. Perinteistä WinForms-käyttöliittymää voidaan yleisesti pitää WPF:ään verrattuna hyvin “staattisena”, joten uusimpaa projektia työstäessäni aloin tutkimaan mahdollisuuksia WPF-toiminnallisuuden tuomiseksi WinForms-sovellukseen.

    Ajatuksena oli siis kehittää esiin ja piiloon sulavasti liukuva paneeli, joka pitää sisällään yhden ListBox- ja kaksi perinteistä Label-komponenttia. Kyseistä kokonaisuutta käytettäisiin siten hyväksi sovelluksen avulla tarkasteltavien vieraskirja-viestien selaamiseen. Voin paljastaa jo tässä vaiheessa, että koko projektin tarkoituksena on kehittää pieni Windows-sovellus, jonka avulla voin käsitellä tämän sivuston vieraskirja-osiossa olevia viestejä suoraan oman kotikoneeni työpöydältä. Tulen kirjoittelemaan tänne blogiin myös myöhemmin jotain juttua kyseisestä projektista, joten siitä ei sen enempää tässä vaiheessa.

    Käytännössä WPF-toiminnallisuuden tuominen WinForms-sovellukseen on tehty hyvin yksinkertaiseksi toteuttaa .NET-ympäristössä ja sen vuoksi aiheesta löytyy useita hyviä kirjoituksia Internetin syövereistä ( Esimerkiksi tämä ). Käytännössä siis edellämainitusta tutoriaalista tulee ymmärtää seuraavat seikat: WPF-toiminnallisuus tulee toteuttaa erillisessä WPF User Control -projektissa ja WinForms-sovellukseen, johon WPF-komponentti liitetään, tulee lisätä Element Host -kontrolli, joka toimii alustana liitettävälle komponentille. Luonnollisesti myös se tekniikka, jonka avulla WPF-komponentti liitetään Element Host:iin, tulee ymmärtää. Tarkemmin ottaen liitos voidaan suorittaa useamman erilaisen menettelyn kautta. Se voidaan siis tehdä siten, että samaan sollution-kokonaisuuteen, missä myös kohteena oleva WinForms-projekti sijaitsee, lisätään uusi (Add -> New Project…) tai jo olemassa oleva (Add -> Existing Project…) WPF User Control -projekti. Tämän jälkeen WPF-kontrolli voidaan lisätä Element Host:iin Visual Studio:n designer:n kautta. Itseäni kiinnosti kuitenkin lähinnä se, miten ulkoiseksi dll-tiedostoksi käännetty WPF-komponentti liitetään Element Host:iin.


    komponentin bindaus

    WPF-kontrolli voidaan liittää Element Host:iin Visual Studio:n designer:n kautta, jos kontrollista on luotu
    oma projekti samaan sollution-kokonaisuuteen, missä liitoksen kohteena oleva WinForms-projekti on.

    Mikäli liitettävä WPF-komponentti on siis käännetty dll-tiedostoksi, joka on hyvin todennäköistä hyödynnettäessä esimerkiksi kolmannen osapuolen valmistamaa komponenttia, niin liitos Element Host:iin tulee suorittaa sovelluksen koodissa. Liitoksen tekeminen koodissa onnistuu kätevästi hyödyntämällä Element Host:n Child-ominaisuutta. Käytännössä siis ensin asetetaan projektiin viittaus (reference) ulkoiseen käännetyn WPF-kontrollin dll-tiedostoon, jonka jälkeen kontrolli instannoidaan esimerkiksi kohteena olevan luokan alussa ja asetetaan Element Host:n Child-ominaisuuteen..Helppoa!


    dll liitos

    Ulkoiseksi dll-tiedostoksi käännetty WPF-komponentti otetaan käyttöön sovelluksen koodissa instannoimalla se ensin
    luokkakoodin alussa (1) ja sen jälkeen asettamalla instannoitu objekti esimerkiksi luokan konstruktorissa Element Host:iin (2).
    Tämän jälkeen WPF-komponentin metodeihin ja tapahtumiin päästään käsiksi instannoidun objektin kautta (3).

    Alapuolelta löytyvien linkkien kautta voit tarkastella vielä aiemmin mainitsemaani projektiin luodun WPF-kontrollin XAML- ja C#-koodeja. Toteutin liu’uttamis-animaation C#-koodin avulla, mutta yhtä hyvin se oltaisiin voitu tehdä tässä tapauksessa myös XAML:n avulla. Alapuolelta löytyy myös kuva, mistä voidaan huomata käyttöön otetun WPF-kontrollin ulkoasu.

    XAML: CustomMessageManager C# (Code-Behind): CustomMessageManager


    komponentin ulkoasu

    Käyttöön otettu WPF-kontrolli löytyy kuvan oikeasta yläosasta. Kontrolliin kuuluu yksi ListBox-komponentti ja kaksi Label-komponenttia, jotka voidaan piilottaa tai tuoda esille liu’uttamis animaatiolla höystettynä.

    aihe: dotNet

    “Liukuva WPF-paneeli WinForms-sovellukseen” (Ei kommentteja)

    Kommentoi

    • (hymiot)Näytä Hymiöt
    •  

     
    | Takaisin ylös |
    Blogimoottori: WordPress
    Ulkoasu, Sisältö: © Timo Kallio, 2009-2012 - Savonia-ammattikorkeakoulu