使用Windows 10上的Visual Studio 2017在WPF应用程序中创建功能区

时间:2017-10-01 21:02:29

标签: wpf xaml windows-10 visual-studio-2017 ribbon

我在Windows 10上为Windows Classic桌面的Visual Studio 2017中创建了一个新的WPF应用程序。

我以下列方式将功能区添加到新应用程序中。 xaml代码:

<r:RibbonWindow x:Class="AKnowledgeBase.MainWindow"
        xmlns:r1="http://schemas.microsoft.com/winfx/2006/xaml/presentation/ribbon"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:AKnowledgeBase"
        mc:Ignorable="d"
        xmlns:r="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary"
                xmlns:r2="clr-namespace:Microsoft.Windows.Controls.Ribbon.Primitives;assembly=RibbonControlsLibrary"
                Title="AKnowledgeBase" Height="350" Width="525">
    <DockPanel>
        <r:Ribbon>
            <r2:RibbonTabsPanel></r2:RibbonTabsPanel>
        </r:Ribbon>

    </DockPanel>

</r:RibbonWindow>

并更改基类:

   public partial class MainWindow : RibbonWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }

但结果应用程序窗口看起来很难看:

enter image description here

在上图中,您可以看到Explorer标题(它在Windows10中具有标准视图)和创建的应用程序标题(它看起来像Windows98样式的视图)。

为什么会发生以及如何解决?

UPD1

当我使用以下建议的System.Windows.Controls.Ribbon.dll时,主窗口左侧和右侧有蓝色文物: enter image description here

此外,当我最大化此窗口时 - 会出现标题错误:

enter image description here

文本部分切割。

2 个答案:

答案 0 :(得分:1)

添加对System.Windows.Controls.Ribbon.dll的引用并尝试此XAML标记:

<RibbonWindow x:Class="AKnowledgeBase.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:r2="clr-namespace:System.Windows.Controls.Ribbon.Primitives;assembly=System.Windows.Controls.Ribbon"
        mc:Ignorable="d"
        Title="Window14" Height="300" Width="300">
    <Grid>
        <DockPanel>
            <Ribbon>
                <r2:RibbonTabsPanel></r2:RibbonTabsPanel>
            </Ribbon>
        </DockPanel>
    </Grid>
</RibbonWindow>

您可能不需要RibbonWindow

<Window x:Class="AKnowledgeBase.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication7"
        xmlns:r2="clr-namespace:System.Windows.Controls.Ribbon.Primitives;assembly=System.Windows.Controls.Ribbon"
        mc:Ignorable="d"
        Title="Window14" Height="300" Width="300">
    <Grid>
        <DockPanel>
            <Ribbon>
                <r2:RibbonTabsPanel></r2:RibbonTabsPanel>
            </Ribbon>
        </DockPanel>
    </Grid>
</Window>

答案 1 :(得分:0)

您可能已经添加了一些基于主题的样式以及r,r1和r2引用。我建议您寻找一种方法来构建功能区,而不会覆盖默认样式。