恰巧我正在使用的應用程序不能在文檔上操作,所以不需要在應用程序菜單中顯示最近打開的文檔列表。
但是 - 令人煩惱的是 - 在RibbonApplicationMenu
類中沒有容易獲得的屬性來隱藏未使用的AuxiliaryPane
(爲此,好奇地,該屬性確實存在,但被標記爲「內部」)。
當然,我可以把它留在那裏 - 但那是... un。。RibbonApplicationMenu:擺脫輔助平板
所以,這是我想出的解決方案。
希望這將有助於其他人:-)
的總體思路是繼承RibbonApplicationMenu
,找到對應於菜單的彈出模板的孩子,否決其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) - 但無濟於事。
鑑於我對「幻數」的鄙視,對的任何建議將深表感謝。
如果你設置'AuxiliaryPaneContent'爲空,會發生什麼? – Vlad
或者您也許可以訪問'PART_AuxiliaryPaneContentPresenter'而不需要創建原始菜單的子類('menu.Template.FindName(「PART_AuxiliaryPaneContentPresenter」,menu);')並將其可見性設置爲隱藏? – Vlad
弗拉德:我試了兩種。都沒有工作。 – Alex