是否可以将Ribbon或RibbonTab放在单独的xaml文件中?

时间:2017-02-23 10:13:07

标签: c# wpf xaml ribbon

回购:https://github.com/babakin34/ribbontest1/

我有一个 Main.xaml 和一个 MyRibbon.xaml

MyRibbon.xaml

<ribbon:Ribbon xmlns:ribbon="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <ribbon:RibbonTab Header="">
        <ribbon:RibbonMenuButton Label="Upload"/>
    </ribbon:RibbonTab>
</ribbon:Ribbon>

MyRibbon.xaml.cs

public class MyRibbon : Ribbon {}

Main.xaml

<Grid>
    <MyRibbon/>
</Grid>

问题是网格中显示了一个空的功能区。 (上传菜单不正确)

以下是整个项目快照:

enter image description here

1 个答案:

答案 0 :(得分:1)

您的MyRibbon课程与MyRibbon.xaml文件之间没有自动连接。

如果要创建自定义控件,则应为其定义模板

public class MyRibbon : Ribbon {}
<Grid xmlns:ribbon="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <Grid.Resources>
        <Style TargetType="local:MyRibbon">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="local:MyRibbon">
                        <ribbon:Ribbon>
                            <ribbon:RibbonTab Header="">
                                <ribbon:RibbonMenuButton Label="Upload"/>
                            </ribbon:RibbonTab>
                        </ribbon:Ribbon>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Grid.Resources>
    <local:MyRibbon/>
</Grid>

另一种选择是简单地创建一个名为MyRibbon的UserControl并将您的XAML标记放在MyRibbon.xaml文件中。然后,您可以像这样使用UserControl

<local:MyRibbon />
  1. 创建一个新的UserControl(项目 - &gt;添加新项目 - &gt;用户控件(WPF)并将其命名为&#34; MyRibbon&#34;。

  2. 使用以下内容替换MyRibbon.xaml文件的内容:

    <Ribbon x:Class="WpfApplication3.MyRibbon"
                     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <RibbonTab Header="">
            <RibbonMenuButton Label="Upload"/>
        </RibbonTab>
    </Ribbon>
    
  3. 更改MyRibbon.xaml.cs中的基类:

    public partial class MyRibbon : System.Windows.Controls.Ribbon.Ribbon
    {
        public MyRibbon()
        {
            InitializeComponent();
        }
    }
    
  4. 将控件添加到Main.xaml:

    <local:MyRibbon />
    
  5. enter image description here