1

遇到了一个有趣的问题,它只影响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 但窗口顶层也会产生这个问题。我很可能也会联系 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>

那么这不应该发生。

在此处输入图像描述

在停靠且未最小化时工作正常 在此处输入图像描述

4

1 回答 1

1

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

来自 Telerik:

'所描述的行为是由窗口弹出窗口的设置引起的。Windows 操作系统中的弹出窗口根据惯用手设置以不同的方向呈现。您可以通过转到 Windows 设置来验证它:ControlPanel->Tablet PC 设置。如果惯用手设置为“左撇子”,这是大多数操作系统版本中的默认值,则弹出菜单将从其目标元素的右到左呈现。换句话说,带有 RadRibbonView 内容的弹出窗口将正确定位。另一方面,“右手”设置将从右到左绘制弹出窗口。

您可以尝试将惯用手更改为“左撇子”,看看是否能解决问题。可以尝试的另一种解决方法是使用代码。基本上,您可以更改 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;
    }
}

'

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

于 2017-10-25T15:18:31.597 回答