Telerik RadRibbonView 在 Surface Pro 中向左弹出 RadRibbonTab 嵌套对象

Telerik RadRibbonView pops up RadRibbonTab nested objects to the left in Surface Pro

遇到一个有趣的问题,它只影响 Surface Pro 3 上的代码。当 运行 一个 RadRibbonView 的 telerik 控件然后将其最小化时,弹出窗口将在屏幕的最左侧打开。此行为不会发生在桌面上,并且只在 RadRibbonTab 下方进行裁剪。在 Surface Pro 3 上,当视图未最小化时它工作正常,但当最小化时它表现不佳。我正在考虑更多地调查可能导致这种情况的原因,并且正在关注 Telerik 上的一些教程:https://docs.telerik.com/devtools/wpf/controls/radribbonview/features/ribbon-controls/ribbon-window-wpf。在我的示例中 XAML 显示它正在使用他们的 RadRibbonWindow 但是 Window 顶层也会产生这个问题。我很可能也会联系 Telerik,但很好奇 Stack Overflow 上是否有人看到了这个并且知道如何处理它。

<telerik:RadRibbonWindow x:Class="TelerikTesting.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:TelerikTesting"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <telerik:RadRibbonView x:Name="RibbonView" IsMinimizable="True" IsMinimized="True" MinimizeButtonVisibility="Visible" 
                           PopupOpened="RadRibbonView_PopupOpened">
        <telerik:RadRibbonView.Items>
            <telerik:RadRibbonTab Header="Home">
                <telerik:RadRibbonGroup Header="HomeContent" >
                </telerik:RadRibbonGroup>
            </telerik:RadRibbonTab>
            <telerik:RadRibbonTab Header="View" />
        </telerik:RadRibbonView.Items>
    </telerik:RadRibbonView>
</telerik:RadRibbonWindow>

嗯,这不应该发生。

停靠且未最小化时工作正常

Telerik 发布了回复,基本上是平板电脑设备的默认行为导致了这个问题。您可以通过直接更改 OS 行为或在连接到构造函数的代码中更改来修复它。无论哪种方式,它似乎都可以轻松解决 Surface Pro 3 上的问题,我猜其他平板电脑设备也是如此。

来自 Telerik:

'所描述的行为是由 window 的弹出窗口设置引起的。 Windows OS 中的弹出窗口根据用手习惯设置在不同的方向上呈现。您可以通过转至您的 Windows 设置来验证它:控制面板 -> 平板电脑设置。如果惯用手设置为 "Left-handed",这是大多数版本 OS 中的默认值,弹出菜单将从其目标元素的右向左呈现。换句话说,带有 RadRibbonView 内容的弹出窗口将被正确定位。另一方面,"Right-handed" 设置将从右到左绘制弹出窗口。

您可以尝试将用手习惯更改为 "Left-handed",看看是否可以解决问题。可以尝试的另一种解决方法是使用代码。基本上,您可以更改 SystemParameters.MenuDropAlignment 属性 的值。您可以使用以下方法来实现:

public static void SetAlignment()
{
    var ifLeft = SystemParameters.MenuDropAlignment;

    if (ifLeft)
    {
        // change to false
        var t = typeof(SystemParameters);
        var field = t.GetField("_menuDropAlignment", BindingFlags.NonPublic | BindingFlags.Static);
        field.SetValue(null, false);

        ifLeft = SystemParameters.MenuDropAlignment;
    }
}

'

我只是在后面的代码中连接了给我的视图构造函数的代码方法,它工作得很好。