The attached project demonstrates a possible approach for handling this - by editing RadRibbonWindow's control template and specifying a converter for the PART_Icon Image's Width and Height bindings. The converter in turn takes into account the DPI of the current monitor.
Currently, the RadRibbonTab GetChildrenCore method creates automation peers only for the elements in its Items collection. There is no peer created for the element in the Header. Add support for this.
This missing peer, leads to that the TextBlock in the Header of the ribbon tabs is not highlighted when using a UI inspecting tool (like Snoop and its Automation option or UISpy.exe).
NullReferenceException is thrown on start up of the application, when the IsMinimized property of RadRibbonView is set to True initially. For example, if you set it in XAML.
To work this around, set the IsMinimized property in the Loaded event handler of RadRibbonView.
private void RadRibbonView_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
var ribbonView = (RadRibbonView)sender;
ribbonView.IsMinimized = true;
}
In XP and Windows10, the window goes behind the windows task bar when it is maximized. The problem manifests itself if we set explicitly the "WindowStyle" property of the RadRibbonWindow. With its "default" value, the problem do not exists. It is also reproduced when AllowTransparency = True (it requires WindowStyle = None), which is needed to set a drop shadow effect.
would be very helpful especially for users who are new to Telerik and/or WPF
This is reproducible only if the application that holds RadRibbonView is started on another machine and you are connected to it through Remote Desktop Connection. When the keytips are enabled and you click in the main machine, then click inside the remote desktop window, the keytips are displayed.
If you add the RibbonView into the Content of a TabItem (or RadTabItem) and then remove it from the content, the RibbonView is still in the memory.
This happens because we subscribe to few events of the Parent window on Loaded and unsubscribe on Unloaded. However, because of the specific content loading behavior of TabControl, Loaded of the content (the RibbonView) is fired once and Unloaded only once.
To work this around, before removing the RibbonView from the TabItem, call its OnUnloaded event handler. To do this, you can use a reflection to get the handler and then invoke it.
var methodInfo = typeof(RadRibbonView).GetMethods(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).Where(m => m.Name == "OnUnloaded").First();
methodInfo.Invoke(ribbon, new object[2] { null, null });
The popup is no properly sized when you have two or more monitors with different resolutions. This is replicable also if the DPI is higher than 100%. To work this around you can create a custom ribbonview, get the content presenter of the popup and manually set its Width. Here is an example in code: public class CustomRibbonView : RadRibbonView { private ContentPresenter selectedTabContentPopup; public override void OnApplyTemplate() { base.OnApplyTemplate(); this.selectedTabContentPopup = this.GetTemplateChild("SelectedTabContentPopup") as ContentPresenter; } protected override void OnMinimizedPopupStateChanged(RadRoutedEventArgs e) { base.OnMinimizedPopupStateChanged(e); if (this.IsMinimizedPopupOpen) { this.selectedTabContentPopup.Width = this.ActualWidth; } } }
Currently, the minimized content of the ribbon opens up in a Popup element which leads to issues when positioned between two (or more) monitors. Introduce a feature that allows the content to opens in an Adorner element.
Add thin border in the RadRibbonWindow between the Tittle and RibbonView. We want the look of the window to be identical to how a non-implicit RadRibbonWindow would look (i.e., without the Themes directory with the style XAML files). Alternatively, if the title bar is taller and the borders are as thick as a normal window (e.g. Notepad), that is acceptable too.