是否可以将功能区或功能区选项卡放在单独的 xaml 文件中?

Is it possible to put a Ribbon or RibbonTab in seperate xaml file?

回购: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>

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

这是整个项目的快照:

这对我有用。 MyRibbon.xaml:

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

Main.xaml:请注意,uc对应MyRibbon(XFWPF.WPF).

的命名空间
<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <uc:MyRibbon/>
    </Grid>

您的 MyRibbon class 和 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. 创建一个新的用户控件(项目->添加新项->用户控件(WPF)并将其命名为"MyRibbon"。

  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 中的基数 class:

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

    <local:MyRibbon />