WPF功能区遮盖了标题栏

时间:2014-06-24 18:51:58

标签: c# wpf visual-studio xaml ribbon

我在Visual Studio 2013中使用C#制作WPF程序,而我正在使用Ribbon组件。到目前为止,我只为功能区编写了XAML并在其上添加了几个按钮,并且仅通过添加using System.Windows.Controls.Ribbon;和子类化RibbonWindow而不是Window来修改C#文件。我记得在Visual Studio中为功能区添加了对所需.dll的引用。

当我运行程序时,标题栏真的被掩盖了: enter image description here

将功能区设置为HorizontalAlignment="Left"使其如下所示:enter image description here

我对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位系统。

1 个答案:

答案 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集成,因此您可以:

  1. 尝试MSDN示例代替您的代码。我没有看到任何根本的差异,但谁知道呢。如果它有效 - 我们将知道XAML或代码隐藏中存在一些简单的问题。如果没有 - 请尝试下一步
  2. 尝试更改目标.NET版本(尽可能尝试)。
  3. 尝试更改Windows中的视觉样式(简化为Aero或Classic)。
  4. 将Windows类的手动更改继承到RibbonWindow可能会出现一些问题。 Window的代码隐藏文件实际上是部分类。我不确定它是如何以这种方式发挥作用的,但这是一个可能的方向。
  5. 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,没有任何名称空间前缀。

    我希望它会有所帮助。