我在Visual Studio 2013中使用C#制作WPF程序,而我正在使用Ribbon组件。到目前为止,我只为功能区编写了XAML并在其上添加了几个按钮,并且仅通过添加using System.Windows.Controls.Ribbon;
和子类化RibbonWindow
而不是Window
来修改C#文件。我记得在Visual Studio中为功能区添加了对所需.dll的引用。
当我运行程序时,标题栏真的被掩盖了:
将功能区设置为HorizontalAlignment="Left"
使其如下所示:
我对WPF,C#和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>
这是Windows 7 Professional 32位系统。
答案 0 :(得分:2)
但是你的问题是所有东西都应该被绘制 - Ribbon不知道那些关闭和最小化按钮 - 它只是给了一些空间来绘制。
要更改其外观和行为,请使用templates,创建user control或直接对功能区进行子类化(这不是通常的方式,但有时您真的想要封装控件)。
<Window>
<Grid>
...
<MyRibbon Grid.Row="0" .../>
<Ribbon Grid.Row="1" Template={StaticResource MyRibbonTemplate} .../>
</Grid>
</Windows>
修改强>
对不起,我有点不专心,从不关注RibbonWindow。我实际上从未见过或使用过RibbonWindow。我之前写的几乎完全错了。谢谢你的指点。现在问题。
此类行为表明Ribbon控件未与RibbonWindow集成,因此您可以:
P.S。:我稍后会自己试一试并写下任何结果。
修改强>
我已经下载了功能区控件库,并尝试使用Visual Studio 2013 for .NET 4.5在Windows 8.1中运行MSDN示例 - 一切正常。但是当我将目标框架更改为4.0时,Ribbon控件将整个行标题变黑。尽管如此,我还是会尝试使用VS2010在Win 7中的示例。
修改强>
此类代码适用于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架构来识别功能区,而不是MSDN显示的clr命名空间, 还使用了RibbonWindow,没有任何名称空间前缀。
我希望它会有所帮助。