Я делаю WPF-программу на С# в Visual Studio 2013, и я использую компонент Ribbon. Пока я только написал XAML для ленты и несколько кнопок на ней и только изменил файл С#, добавив using System.Windows.Controls.Ribbon;
и подклассом RibbonWindow
вместо Window
. Я вспомнил, что добавил ссылку на требуемую.dll в Visual Studio для ленты.
Когда я запускаю программу, панель заголовка действительно закрыта:
Установка ленты для HorizontalAlignment="Left"
выравнивания HorizontalAlignment="Left"
делает ее такой:
Я новичок в 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.
Но ваша проблема в том, что все расписано так, как должно быть - лента ничего не знает о кнопках с близкими и минимальными кнопками - ей просто нужно нарисовать какое-то место.
Чтобы изменить внешний вид и поведение, используйте шаблоны, создайте пользовательский элемент управления или непосредственно подклассируйте ленту (это не обычный способ, но иногда вы действительно хотите инкапсулировать свой контроль).
<Window>
<Grid>
...
<MyRibbon Grid.Row="0" .../>
<Ribbon Grid.Row="1" Template={StaticResource MyRibbonTemplate} .../>
</Grid>
</Windows>
РЕДАКТИРОВАТЬ:
Извините, я был немного невнимателен и никогда не смотрел на RibbonWindow. Я на самом деле никогда не видел или не использовал RibbonWindow. То, что я написал ранее, было почти полностью неправильным. Спасибо, что указали это. Теперь к проблеме.
Такое поведение указывает на то, что управление лентой не интегрировано с 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 используется без префикса пространства имен.
Надеюсь, что это поможет.