如何在WPF中开始使用Ribbon界面?

5
我尝试引用了System.Windows.Controls.Ribbon,但工具箱选项卡没有显示。如果我右键单击选项卡并点击“显示全部”,则选项卡会在那里,但控件不会亮起来。我可以手动添加相关的选项卡和控件,但在添加菜单之后,诸如quickaccesstoolbarmenuitem之类的东西不能正常工作-由于某种原因,它们被视为选项卡。控制组也无法工作。总而言之,什么都不能像应该的那样工作。

我尝试直接编辑XAML。它以与使用设计师相同的方式失败。

在线教程要么过时,要么收费,要么根本行不通。

我不想使用诸如 http://www.codeproject.com/Articles/364272/Easily-Add-a-Ribbon-into-a-WinForms-Application-Cs这样的标记解决方案,我想要在设计师中工作的东西-这太难了吗?如果是这样,那么我很愿意回到winforms。

如果您使用功能区,您是如何做到的?这个问题看起来很简单,但是经过几个小时的搜索,我仍然没有答案。

我是一名个体开发者,正在制作开源、免费软件。作为学生,我确实买不起价值1000美元的控件套件。我使用VS2013社区版,我尝试使用2015版,但上述所有问题都是相同的。


顺便问一下,这些控件的问题是在设计器中无法工作,还是根本就无法工作?(我不是微软开发人员,所以无法提供帮助,但澄清一下可能会有帮助)。 - halfer
您正在阅读的链接告诉您如何在WINFORM上实现控件,但是您的标题却说了另外一种情况。您能确认您想要处理哪种GUI吗?很抱歉,我也认为VS版本不应该是问题。如果您谈论不同的.NET版本,我会再搜索更多信息,但是VS版本不应该是一个问题。还有一件事要提醒,我敢打赌大多数WPF开发人员从不依赖设计视图,我们直接键入可怕的xaml代码。 - cscmh99
@cscmh99 我想要一个能在WPF的设计器中正常运作的解决方案。我能够并且已经做过没有设计器的界面,但我认为那只有在所有其他方法都失败时才应该使用。设计器也能减少你需要编写的代码量,因此提高生产力和减少错误,当它正在工作时(哈哈)。 我实际上尝试过XAML编辑、复制代码等,但它们无法像设计器一样正常工作。 - Zuoanqh
但我现在正在将该信息添加到问题中。 - Zuoanqh
2个回答

13

添加这个引用:

reference

在XAML文件中加入这个命名空间:

namespace

并尝试使用以下代码示例:

 <DockPanel>
    <Ribbon DockPanel.Dock="Top" Margin="0,-22,0,0">  
        <Ribbon.ApplicationMenu>
            <RibbonApplicationMenu SmallImageSource="Images/list.png">
                <RibbonApplicationMenu.AuxiliaryPaneContent>
                    <RibbonGallery ScrollViewer.VerticalScrollBarVisibility="Auto">
                        <RibbonGalleryCategory MaxColumnCount="1">
                            <RibbonGalleryItem
                            x:Name="GalleryItem1" Content="Application menu content" 
                            MouseOverBackground="Transparent"
                            MouseOverBorderBrush="Transparent"
                            CheckedBackground="Transparent"
                            CheckedBorderBrush="Transparent"
                            />
                            <RibbonGalleryItem>
                                <Hyperlink x:Name="hl1" Click="hl1_Click">
                                    <Run Text="http://www.bing.com"/>
                                </Hyperlink>
                            </RibbonGalleryItem>
                        </RibbonGalleryCategory>
                    </RibbonGallery>
                </RibbonApplicationMenu.AuxiliaryPaneContent>
                <RibbonApplicationMenuItem x:Name="menuItem1" Header="Add"
                    ImageSource="Images/add.png"/>
                <RibbonApplicationMenuItem x:Name="menuItem2" Header="Settings"
                    ImageSource="Images/system_preferences.png"/>
            <RibbonApplicationMenu>
        </Ribbon.ApplicationMenu>
        <RibbonTab x:Name="rbnTab1" Header="Tab1">
            <RibbonGroup x:Name="rbnGr1" Header="General">
                <RibbonButton x:Name="btnRibbon1" Label="Save"
                    LargeImageSource="Images/filesave.png"/>
                <RibbonButton x:Name="btnRibbon2" Label="Open"
                    LargeImageSource="Images/load.png"/>
            </RibbonGroup>
            <RibbonGroup x:Name="rbnGr2" Header="New group">
                <RibbonButton x:Name="btnRibbon3" Label="Font"
                    LargeImageSource="Images/fonts.png"/>
                <RibbonButton x:Name="btnRibbon4" Label="Delete"
                    LargeImageSource="Images/recycle_bin.png"/>
            </RibbonGroup>
        </RibbonTab>
        <RibbonTab x:Name="rbnTab2" Header="Tab2">
            <RibbonGroup x:Name="rbnGr3" Header="Other Group">
                <RibbonButton x:Name="btnRibbon5" Label="Play"
                    LargeImageSource="Images/play.png"/>
                <RibbonButton x:Name="btnRibbon6" Label="List"
                    LargeImageSource="Images/kmenuedit.png"/>
            </RibbonGroup>
            <RibbonGroup x:Name="rbnGr4" Header="What a group">
                <RibbonButton x:Name="btnRibbon7" Label="Sleep"
                    LargeImageSource="Images/icon_sleep.png"/>
                <RibbonButton x:Name="btnRibbon8" Label="Add"
                    LargeImageSource="Images/add.png"/>
            </RibbonGroup>
        </RibbonTab>
    </Ribbon>

    <Grid>
        <!-- add your content here-->

    </Grid>
</DockPanel>
你可以通过添加属性Visibility="Collapsed"来移除<Ribbon.ApplicationMenu>,如果你不喜欢它的话。
<Ribbon.ApplicationMenu>
    <RibbonApplicationMenu Visibility="Collapsed">
    </RibbonApplicationMenu>
</Ribbon.ApplicationMenu>

1
我添加了引用并粘贴了代码,但没有添加XAML引用。它似乎可以在没有引用的情况下工作。 - StayOnTarget

2
请看以下内容。您应该能够对Ribbon有一个非常基本的了解。

http://blogs.msdn.com/b/wpf/archive/2010/08/03/introducing-microsoft-ribbon-for-wpf.aspx

样例项目下载
如果您想运行该项目,您需要将项目的.NET Framework版本更改为4.0或更高版本。
将System.Window.Controls.Ribbon引用添加到项目中。
移除类似于System.Window.Shell和RibbonControlLibrary的引用。
在修复xmal和codebehind.cs中所有命名空间后,样例应该能够运行。

http://blogs.msdn.com/b/wpf/archive/2010/08/03/building-a-simple-ribbon-application-in-wpf.aspx

微软WPF版功能区(获取带有示例的版本以获得更全面的示例) http://www.microsoft.com/zh-cn/download/details.aspx?id=11877

这是一个过时的hack。我真的想要一个能够为设计师增添价值的本地解决方案,具备所有应有的支持。如果我要在没有帮助的情况下编写整个功能区,那么干脆重新发明功能区算了。此外,如果我在工具箱中选择“显示全部”,就会看到功能区选项卡。我看到旧教程中它与设计师完美配合使用。为什么随着从3.5升级,它变得越来越糟糕呢?对于像功能区这样基本的东西,它似乎不是正确的轨迹。 - Zuoanqh
我不知道你想要什么。Ribbon是由Microsoft提供的独立控件和.NET Framework 4.5的一部分。https://msdn.microsoft.com/en-us/library/ff799534(v=vs.110).aspx。所以,我不确定你所说的旧/新黑客指的是什么。我知道我不是WPF的终极专家,但我已经告诉过你,在开发WPF应用程序时不应依赖设计师。让我这么说吧。Mircosoft推出了另一个工具叫做Blend来处理“设计师视图”,但它在大多数WPF项目中仍然效果不佳。 - cscmh99
赞同其有帮助性,但是微软网站上难道没有比2010年更近的资源吗?那看起来太旧了。 - halfer
我感觉我不得不重复很多次。以前它能够工作!我看到视频,设计师们都可以使用它!为什么我不能得到一些呢? - Zuoanqh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接