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

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 😛 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.

5 thoughts on “O wstążce w pryzmacie ( Ribbon + Prism)

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

  2. […] O wstążce w pryzmacie ( Ribbon + Prism) […]

  3. Luke says:

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

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

  5. Luke says:

    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

Your email address will not be published. Required fields are marked *