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;
}
}
'
我只是在后面的代码中连接了给我的视图构造函数的代码方法,它工作得很好。
遇到一个有趣的问题,它只影响 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;
}
}
'
我只是在后面的代码中连接了给我的视图构造函数的代码方法,它工作得很好。