碰巧我正在处理的应用程序没有对文档进行操作,所以没有必要在应用程序菜单中显示最近打开的文档列表。
但是 - 令人讨厌的是 - 类中没有现成的属性RibbonApplicationMenu
来隐藏未使用的AuxiliaryPane
(奇怪的是,该属性确实存在,但被标记为“内部”)。
当然,我可以把它放在那里——但那是……不整洁。
所以,这是我想出的解决方案。
希望它对其他人有帮助:-)
总体思路是将 子类化RibbonApplicationMenu
,找到与菜单的 Popup 相对应的模板子项,并否决它Width
(经过多次令人沮丧的实验,很明显,这样做既不为PART_AuxiliaryPaneContentPresenter
也不为PART_FooterPaneContentPresenter
- 也不为两者 - 可以实现任何目标)。
好了,废话不多说,代码如下:
public class SlimRibbonApplicationMenu : RibbonApplicationMenu
{
private const double DefaultPopupWidth = 180;
public double PopupWidth
{
get { return (double)GetValue(PopupWidthProperty); }
set { SetValue(PopupWidthProperty, value); }
}
public static readonly DependencyProperty PopupWidthProperty =
DependencyProperty.Register("PopupWidth", typeof(double),
typeof(SlimRibbonApplicationMenu), new UIPropertyMetadata(DefaultPopupWidth));
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
this.DropDownOpened +=
new System.EventHandler(SlimRibbonApplicationMenu_DropDownOpened);
}
void SlimRibbonApplicationMenu_DropDownOpened(object sender, System.EventArgs e)
{
DependencyObject popupObj = base.GetTemplateChild("PART_Popup");
Popup popupPanel = (Popup)popupObj;
popupPanel.Width = (double)GetValue(PopupWidthProperty);
}
}
作为旁注,我试图找到任何方法来解决基于 ApplicationMenu 项目的最大宽度的所需宽度(而不是通过 XAML 中的 DependencyProperty 显式设置它) - 但无济于事。鉴于我对“幻数”的鄙视,
对此
的任何建议将不胜感激。