我的应用程序具有许多功能区选项卡,并且其中一些选项卡上需要重复一组特定的功能区控件。这些不是动态内容,而只是重复使用的静态元素。
我可以在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>
答案 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>