20
votes

I'm using the release Version of Windows 8 and Visual Studio 2012 to create a WPF application with a Ribbon control. I choose the ribbon control that comes with WPF in .Net Framework 4.5.

My code to create the ribbon:

<RibbonWindow
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfExperiments" x:Class="WpfExperiments.MainWindow"
    Title="MainWindow" Height="350" Width="525" Icon="Test.ico">
<Ribbon>        
    <Ribbon.ApplicationMenu>
        <RibbonApplicationMenu>
            <RibbonApplicationMenuItem Header="Item 1"></RibbonApplicationMenuItem>
        </RibbonApplicationMenu>
    </Ribbon.ApplicationMenu>
    <Ribbon.QuickAccessToolBar>
        <RibbonQuickAccessToolBar>
            <RibbonButton SmallImageSource="Test.ico" Label="Test"></RibbonButton>
        </RibbonQuickAccessToolBar>
    </Ribbon.QuickAccessToolBar>
</Ribbon>

But the problem is that it generates a window with a ugly style that doesn't match the windows 8 style:

My Ribbon

Compare it to the explorer ribbon. The window title is centered (and has a different color) and the border size of the window is different. The style of the ribbon isn't the same, but I would be satisfied if I had the same ribbon style as MS Word (which is displayed correctly in Windows 8).

Explorer Ribbon in Windows 8

Does the ribbon control for WPF not support the new Windows 8 style? Or did I miss any setting?

Edit:

I started to edit the template in Blend (4.0, i don't have access to 5.0). After fixing some compilation errors (seems to be bugs in blend), I can run the application, but it looks like this:

enter image description here

But that isn't a good starting point for my changes...

1
Have you tried to update the style manually in Blend? Or are you looking for an automated way to do it?Neil Kennedy
I'm new to WPF. I only look for a way that displays the window border in the right way on Windows 8 and with the old style on Windows 7.Fox32
I've never used it before but I'm guessing that might not be possible. You might need to create a custom style to make it look like windows 8. When you start your app you could possibly check the OS version and apple whichever style is appropriate. You'll need Expression Blend to do the styling.Neil Kennedy
I'm assuming WPF is drawing the entire window chrome itself. That is, it's not the native Windows Ribbon Framework so you get an approximation. For what it's worth, it was a lot more broken in the VS2012 RC. A rather poor workaround is to use a Window rather than a RibbonWindow and forego the QAT.ta.speot.is
@Fox32: the Ribbon implementation in .Net is based on the Office 2007 style not the Fluent style in Office 2010 and Windows 8. Microsoft has decided that you should purchase 3rd party ribbons if you want something that looks decent.user7116

1 Answers

2
votes

The WPF Ribbon isn't a wrapper for a control offered by the operating system (like most of the Windows Forms controls) but built from scratch to have the look and feel of the ribbon at the time it was developed while being a control that is as flexible as other WPF controls (notice the support for template parts).

That said, it's a matter of the control not (currently) being updated to support the Windows 8 style. Given the number of templates for multiple controls that would have to be changed, as well as the need to be backwards compatible (and this is my speculation at this point) it may have been seen as not a priority when .NET 4.5 was released.

You might be able to change the theme yourself, but that looks like a massive undertaking, so it might be worth it to you to use a third-party control which already implements the Windows 8 ribbon style.