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

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 ):

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

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.
Darek Tarczyński
24 lis 08 at 23:32
Niezły pomysł, z tą modularną budową ribbona!
Luke
25 maj 09 at 19:50
Czyżby przy używaniu wstążki szlag trafiał ClearType’a?
Bartłomiej Szafko
25 maj 09 at 21:38
hmmm tak to wygląda ??? jakoś tego nie widzę ale ślepy jestem
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).