Стиль окна с лентой WPF от Microsoft не соответствует стилю Windows 8

Я использую окончательную версию Windows 8 и Visual Studio 2012 для создания приложения WPF с элементом управления Ribbon. Я выбираю ленточный элемент управления, поставляемый с WPF в .Net Framework 4.5.

Мой код для создания ленты:

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

Но проблема в том, что он генерирует окно с уродливым стилем, которое не соответствует стилю Windows 8:

Моя лента

Сравните это с лентой проводника. Заголовок окна расположен по центру (и имеет другой цвет), а размер границы окна отличается. Стиль ленты отличается, но я был бы удовлетворен, если бы у меня был такой же стиль ленты, как в MS Word (который правильно отображается в Windows 8).

Лента проводника в Windows 8

Лента для WPF не поддерживает новый стиль Windows 8? Или я пропустил какую-то настройку?

Изменить:

Я начал редактировать шаблон в Blend (4.0, у меня нет доступа к 5.0). После исправления некоторых ошибок компиляции (кажется, ошибок в blend) я могу запустить приложение, но оно выглядит так:

введите описание изображения здесь

Но это не лучшая отправная точка для моих изменений ...


person Fox32    schedule 20.09.2012    source источник
comment
Вы пробовали обновить стиль вручную в Blend? Или вы ищете автоматизированный способ сделать это?   -  person Neil Kennedy    schedule 20.09.2012
comment
Я новичок в WPF. Я ищу только способ, который правильно отображает границу окна в Windows 8 и в старом стиле в Windows 7.   -  person Fox32    schedule 20.09.2012
comment
Я никогда не использовал его раньше, но предполагаю, что это может быть невозможно. Возможно, вам потребуется создать собственный стиль, чтобы он выглядел как Windows 8. При запуске приложения вы можете проверить версию ОС и Apple, в зависимости от того, какой стиль подходит. Для укладки вам понадобится Expression Blend.   -  person Neil Kennedy    schedule 20.09.2012
comment
Я предполагаю, что WPF рисует весь хром окна. То есть это не собственная Windows Ribbon Framework. так что вы получите приблизительное значение. Как бы то ни было, В VS2012 RC было намного больше поломок. Довольно плохой обходной путь - использовать Window вместо RibbonWindow и отказаться от QAT.   -  person ta.speot.is    schedule 22.09.2012
comment
Я попытался отредактировать шаблон окна ленты, но не могу скомпилировать нетронутый шаблон, потому что компилятор пропустил ссылку на пространство имен Microsoft.Expression.Platform.WPF.InstanceBuilders. Я ничего не могу найти об этом? Любые идеи?   -  person Fox32    schedule 23.09.2012
comment
@ Fox32 Я знаю, что некоторые Microsoft.Expression вещи доступны в Expression Blend SDK, но я не знаю, есть ли эта сборка / пространство имен.   -  person ta.speot.is    schedule 24.09.2012
comment
Хорошо, похоже, это ошибка в инструменте, который создает шаблон xaml. Я могу сам исправить шаблон, чтобы получить работающую версию   -  person Fox32    schedule 24.09.2012
comment
@ Fox32: реализация ленты в .Net основана на стиле Office 2007, а не на стиле Fluent в Office 2010 и Windows 8. Microsoft решила, что вам следует покупать ленты сторонних производителей, если вы хотите что-то, что выглядит прилично.   -  person user7116    schedule 24.09.2012
comment
@sixlettervariables Мне не нужен стиль Office 2010 или Windows 8, меня интересует только то, что хром окна не выглядит глючным (неправильный цвет текста, неправильный шрифт текста, неправильное выравнивание, неправильные границы ...)   -  person Fox32    schedule 11.10.2012
comment
Следует отметить, что версия C ++ фактически использует собственный стиль ленты.   -  person user23127    schedule 08.01.2013
comment
Также: windowsribbon.codeplex.com поддерживает собственные ленты в формах Windows, вы можете использовать это, если хотите использовать c # и используйте ленту.   -  person user23127    schedule 08.01.2013


Ответы (1)


Лента WPF не является оболочкой для элемента управления, предлагаемого операционной системой (как и большинство элементов управления Windows Forms), но создана с нуля, чтобы иметь внешний вид ленты во время ее разработки, будучи элементом управления, который является такой же гибкий, как и другие элементы управления WPF (обратите внимание на поддержку частей шаблона).

Тем не менее, дело в том, что элемент управления (в настоящее время) не обновляется для поддержки стиля Windows 8. Учитывая количество шаблонов для нескольких элементов управления, которые необходимо будет изменить, а также необходимость обеспечения обратной совместимости (и это мое предположение на данный момент), это могло не рассматриваться как приоритет при выпуске .NET 4.5.

Возможно, вы сможете изменить тему самостоятельно, но это выглядит масштабным мероприятием, поэтому, возможно, вам стоит использовать сторонний элемент управления, который уже реализует стиль ленты Windows 8.

person casperOne    schedule 30.09.2012
comment
Стоит отметить 2 вещи: (1) он называется Fluent UI. в Office 2010 / W8 и (2) сотрудники Microsoft заявили, что, по их мнению, существует достаточно сторонних реализаций, чтобы не тратить много времени на Ribbon в .Net (согласно блогам wpf / tape). - person user7116; 01.10.2012
comment
Сторонние - дерьмо (извините), все время вылетают и зависают программы. Нужен официальный, настраиваемый. - person SE13013; 13.07.2015