Bartek Szafko

all of the bits and pieces

O wstążce w pryzmacie ( Ribbon + Prism)

with 4 comments

Wstążka (Ribbon)

Jakiś czas temu Micorosoft opublikował biblioteki ze wstążką znane z Office 2007 pozwalające na użycie w aplikacjach WPF. Okazuje się, że uzyskanie tych bibliotek wymaga jednak trochę zachodu:

  1. Trzeba się udać na stronę “Office UI Licensing” i skorzystać z linku “License the Office UI”, następnie trzeba się zalogować przy pomocy live Id i zaakceptować licencję. Przyznam się szczerze, że nawet nie wiem na co się zgodziłem :P Na końcu tego kroku będzie można pobrać WPFRibbonCTP – bibliotekę ze wstążką dla WPF.
  2. Najlepiej też pobrać Hands-On-Lab:What’s Coming in WPF: Datagrid, Ribbon, and VSM, który pokazuje jak stworzyć wstążkę. W ćwiczeniu 2 zawarta jest świetna aplikacja demonstracyjna:

image

Podłączamy Prism

O Prism opowiadał Szymon Kobalczyk na 12. spotkaniu PG .NET – jego wystąpienie zainspirowało mnie i zachęciło do eksperymentów. Postanowiłem dodać region pozwalający na dodawanie zakładek do wstążki przez moduły. Po bliższym obejrzeniu kodu źródłowego Prisma okazało się, że trzeba tylko stworzyć własny RegionAdapter:

    public class RibbonControlRegionAdapter : RegionAdapterBase<Ribbon>
    {
        private Ribbon m_regionTarget;

        protected override void Adapt(IRegion region, Ribbon regionTarget)
        {
            m_regionTarget = regionTarget;
            regionTarget.Tabs.Clear();
            region.ActiveViews.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(OnActiveViewsChanged);
            foreach ( RibbonTab v in region.ActiveViews)
                regionTarget.Tabs.Add(v);
        }

        private void OnActiveViewsChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            switch (e.Action)
            {
                case NotifyCollectionChangedAction.Add:
                    foreach (RibbonTab v in e.NewItems)
                        m_regionTarget.Tabs.Add(v);
                    break;

                case NotifyCollectionChangedAction.Remove:
                    foreach (RibbonTab v in e.NewItems)
                        m_regionTarget.Tabs.Remove(v);
                    break;

            }
        }

        protected override IRegion CreateRegion()
        {
            return new AllActiveRegion();
        }
    }

Tak wygląda shell przed podłączeniem modułu ( wiem – brzydki, ale nie o to chodzi:P ):

image

A tak po włączeniu modułu Module1, który używa regionu we wstążce:

image

Rozwój

W tym przykładzie adapter jest tak zbudowany, że pozwala tylko na dodawanie całych zakładek. Można sobie wyobrazić sytuację, w której na istniejących już zakładkach można dodawać nowe przyciski/grupy/menu lub nawet nowe pozycje do głównego menu.

Inne podobne artykuły:

Written by Bartłomiej Szafko

Listopad 23rd, 2008 at 5:52 pm

Posted in Development

1 Trackbacks/Pingbacks

  1. Bartek Szafko : Wizardy w AERO

with 4 comments to “O wstążce w pryzmacie ( Ribbon + Prism)”

Subscribe comments with RSS. TrackBack URL.

  1. Darek Tarczyński

    24 lis 08 at 23:32

    Niezły pomysł, z tą modularną budową ribbona!

  2. Luke

    25 maj 09 at 19:50

    Czyżby przy używaniu wstążki szlag trafiał ClearType’a?

  3. Bartłomiej Szafko

    25 maj 09 at 21:38

    hmmm tak to wygląda ??? jakoś tego nie widzę ale ślepy jestem

  4. Luke

    26 maj 09 at 01:52

    http://img35.imageshack.us/img35/7350/14296404.png
    Ano… wygląda to podobnie jak tekst w Silverlighcie.

    Ogólnie to “ulepszone” renderowanie czcionek w WPF-ie ma jedną wadę, która uwidacznia się przy renderowaniu ciągu literek np. llllllllllllllll albo iiiiiiiiii. Całkiem inaczej wygląda to w GDI (czytelnie), a całkiem inaczej w WPF-ie (przesunięcia uwzględniające subpiksele = nieczytelnie).

Leave a Reply