WPF Ribbon скрывает заголовок

1

Я делаю WPF-программу на С# в Visual Studio 2013, и я использую компонент Ribbon. Пока я только написал XAML для ленты и несколько кнопок на ней и только изменил файл С#, добавив using System.Windows.Controls.Ribbon; и подклассом RibbonWindow вместо Window. Я вспомнил, что добавил ссылку на требуемую.dll в Visual Studio для ленты.

Когда я запускаю программу, панель заголовка действительно закрыта: Изображение 174551

Установка ленты для HorizontalAlignment="Left" выравнивания HorizontalAlignment="Left" делает ее такой: Изображение 174551

Я новичок в WPF, С# и Visual Studio, поэтому я не знаю, что здесь не так. Я вставил код XAML ниже (опуская группы вкладок и меню приложения):

<RibbonWindow
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:Custom="http://schemas.microsoft.com/winfx/2006/xaml/presentation/ribbon" x:Class="SwaagPaiNT.MainWindow"
        Title="Swaag PaiNT" Height="350" Width="525">
    <Grid>
        <Custom:Ribbon HorizontalAlignment="Stretch" VerticalAlignment="Top">
            <Custom:Ribbon.HelpPaneContent>
                <Custom:RibbonButton Name="what" ToolTip="whachunee" />
            </Custom:Ribbon.HelpPaneContent>

            <Custom:Ribbon.QuickAccessToolBar>
                <Custom:RibbonQuickAccessToolBar>
                    <Custom:RibbonButton x:Name="SAVE" ToolTip="BLAZE IT"/>
                    <Custom:RibbonSplitButton x:Name="Undo">
                        <Custom:RibbonSplitMenuItem Header="CANNOT UNDO MORE" />
                    </Custom:RibbonSplitButton>
                </Custom:RibbonQuickAccessToolBar>
            </Custom:Ribbon.QuickAccessToolBar>

        </Custom:Ribbon>

    </Grid>
</RibbonWindow>

Это 32-разрядная система Windows 7 Professional.

Теги:
visual-studio
xaml
wpf
ribbon

1 ответ

2
Лучший ответ

Но ваша проблема в том, что все расписано так, как должно быть - лента ничего не знает о кнопках с близкими и минимальными кнопками - ей просто нужно нарисовать какое-то место.

Чтобы изменить внешний вид и поведение, используйте шаблоны, создайте пользовательский элемент управления или непосредственно подклассируйте ленту (это не обычный способ, но иногда вы действительно хотите инкапсулировать свой контроль).

<Window>
   <Grid>
       ...
       <MyRibbon Grid.Row="0" .../>
       <Ribbon Grid.Row="1" Template={StaticResource MyRibbonTemplate} .../>
   </Grid>
</Windows>

РЕДАКТИРОВАТЬ:

Извините, я был немного невнимателен и никогда не смотрел на RibbonWindow. Я на самом деле никогда не видел или не использовал RibbonWindow. То, что я написал ранее, было почти полностью неправильным. Спасибо, что указали это. Теперь к проблеме.

Такое поведение указывает на то, что управление лентой не интегрировано с RibbonWindow так, как должно быть, поэтому вы можете:

  1. Попробуйте пример MSDN вместо вашего кода. Я не вижу принципиальных различий, но кто знает. Если это сработает - мы узнаем, что в XAML или в коде есть какая-то простая проблема. Если нет - попробуйте следующее
  2. Попробуйте изменить целевую версию.NET (попробуйте максимально возможное).
  3. Попробуйте изменить визуальный стиль в Windows (упрощен до Aero или Classic).
  4. Могут возникнуть некоторые проблемы с измененной вручную наследованием вашего класса Windows в RibbonWindow. Файл с кодом окна по сути является частичным классом. Я не уверен, как это может работать таким образом, но это возможное направление для поиска.

PS: Я попробую его сам позже и напишу о любых результатах.

РЕДАКТИРОВАТЬ:

Я загрузил библиотеки управления лентами и попробовал пример MSDN в Windows 8.1 с Visual Studio 2013 для.NET 4.5 - все работало нормально. Но когда я изменил целевую структуру на 4.0, управление лентой чернило всю строку с заголовком. Тем не менее я попробую пример в Win 7 с VS2010.

РЕДАКТИРОВАТЬ:

Такой код работал для меня в Win7 VS2010, ориентированном на.NET 4.0:

<ribbon:RibbonWindow x:Class="SwaagPaiNT.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:ribbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary"
        Title="MainWindow"
        x:Name="RibbonWindow"
        Width="640" Height="480">

    <Grid x:Name="LayoutRoot">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <ribbon:Ribbon x:Name="Ribbon" Title="Ribbon Title">
            <ribbon:Ribbon.HelpPaneContent>
                <ribbon:RibbonButton />
            </ribbon:Ribbon.HelpPaneContent>
            <ribbon:Ribbon.QuickAccessToolBar>
                <ribbon:RibbonQuickAccessToolBar >
                    <ribbon:RibbonButton x:Name="QATButton1"/>
                    <ribbon:RibbonButton x:Name="QATButton2" 
                                         />
                </ribbon:RibbonQuickAccessToolBar>
            </ribbon:Ribbon.QuickAccessToolBar>
            <ribbon:Ribbon.ApplicationMenu>
                <ribbon:RibbonApplicationMenu >
                    <ribbon:RibbonApplicationMenuItem Header="Hello _Ribbon"
                                                      x:Name="MenuItem1"
                                                      />
                </ribbon:RibbonApplicationMenu>
            </ribbon:Ribbon.ApplicationMenu>
            <ribbon:RibbonTab x:Name="HomeTab" 
                              Header="Home">
                <ribbon:RibbonGroup x:Name="Group1" 
                                    Header="Group1">
                    <ribbon:RibbonButton x:Name="Button1"

                                         Label="Button1" />
                </ribbon:RibbonGroup>
            </ribbon:RibbonTab>
        </ribbon:Ribbon>
    </Grid>
</ribbon:RibbonWindow>

using Microsoft.Windows.Controls.Ribbon;

namespace SwaagPaiNT
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : RibbonWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

Единственное реальное различие между вашим кодом и показанным выше в

<RibbonWindow
 ...
 xmlns:Custom="http://schemas.microsoft.com/winfx/2006/xaml/presentation/ribbon"

В вашем коде используется XML-схема, чтобы идентифицировать ленту, а не пространство имен clr, как показывает MSDN, а также RibbonWindow используется без префикса пространства имен.

Надеюсь, что это поможет.

  • 0
    Спасибо, Евгений. Я попробую (если не завтра, то через несколько недель) и посмотрю, как это работает. Я прочитаю этот StartUpUri и найду несколько шаблонов. Кстати, я следовал этому, поскольку все остальное не было ориентировано на нового человека WPF, и это было совершенно просто: c-sharpcorner.com/UploadFile/0b73e1/ribbon-control-in-wpf-4-5
  • 0
    Извините, что ввел вас в заблуждение, я постараюсь понять вашу проблему. Если нет - я назначу награду за этот вопрос.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню