您可以在功能区中重复一堆控件吗?

时间:2019-07-23 18:57:24

标签: wpf xaml

我的应用程序具有许多功能区选项卡,并且其中一些选项卡上需要重复一组特定的功能区控件。这些不是动态内容,而只是重复使用的静态元素。

我可以在2-3个地方重复这些控件的XAML,但似乎应该有一种更简洁的方法来实现此目的...

我试图创建一个UserControl来容纳重复的元素,但是成功的参半。我粘贴了下面的内容。从每个RibbonTab中都显示UserControl的内容的意义上说,这确实有效。但是这里有问题:

  • 没有UniformGrid(或任何其他“标准”面板,如WrapPanel),则不能在UserControl中包含多个Ribbon功能区控件。但是由于此面板控件的布局这些控件未正确参与常规的Ribbon布局规则(例如,当您调整窗口大小且Ribbon控件的大小可以更改时)。

  • 我必须在每个使用的位置将用户控件包装在RibbonGroup中。最初,我希望将RibbonGroup用作UserControl内的主面板,但这布局不正确-所有辅助控件几乎全部呈现在下部功能区边框下方?

我认为某种类型的模板解决方案可能是更好的选择。但是,我已经阅读到某些功能区控件在设计时并未遵循典型的WPF标准来使用模板,这增加了很多不确定性。

请注意,虽然我可能更喜欢仅使用XAML的方法,但是如果后面的代码巧妙地做到了这一点,我认为那会很好。

UserControl:

<UserControl x:Class="ribbon1.SampleUC" ...>

    <UniformGrid Columns="2" Rows="1">

        <RibbonButton
            Label="Zoom In"
            SmallImageSource="..."
            />

        <RibbonButton
            Label="Zoom Out"
            SmallImageSource="..."
            />

    </UniformGrid>

</UserControl>

主功能区:

<Ribbon>
    ...
    <RibbonTab Header="Tab1">
    ...
        <RibbonGroup>
            <l:SampleUC/>
        </RibbonGroup>
    </RibbonTab>

    <RibbonTab Header="Tab2">
    ...
        <RibbonGroup>
            <l:SampleUC/>
        </RibbonGroup>
    </RibbonTab>
    ...
</Ribbon>

1 个答案:

答案 0 :(得分:1)

用RibbonGroup替换SampleUC.xaml中的UserControl标记,并在文件后面的代码中更改父类。

<RibbonGroup x:Class=".SampleUC"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <UniformGrid Columns="2" Rows="1">
      <RibbonButton Label="Zoom In" />
      <RibbonButton Label="Zoom Out" />
</UniformGrid>

public partial class SampleUC : RibbonGroup
{
    public SampleUC()
    {
        InitializeComponent();
    }
}

现在您可以像这样使用它

    <Ribbon>
        <RibbonTab Header="Tab1">
            <l:SampleUC/>
        </RibbonTab>
    </Ribbon>