1

我的游戏有个奇怪的问题。当您获得高分时,我们会启用 Xaml 文本框,以便您可以点击它并调用屏幕键盘。但最近这有点坏了。我在我的 .xaml 中创建了一个文本框,并打开了 visibility.collapsed 并将其命名为 txtTest。当我加载我的游戏时,我将一个事件处理程序连接到它上面

txtTest.PointerPressed += txtTest_PointerPressed;
txtTest.AddHandler(PointerPressedEvent, new Windows.UI.Xaml.Input.PointerEventHandler(txtTest_PointerPressed), true);

当我进入高分屏幕时,会触发一个事件,使文本框可见但不透明度为 0 并设置位置和大小。

Thickness margin = txtTest.Margin;
margin.Left = 1350 * _game.scale.X;
margin.Top = 770 * _game.scale.Y;
margin.Bottom = 240 * _game.scale.Y;
margin.Right = 200 * _game.scale.X;
txtTest.Margin = margin;
txtTest.Width = 300 * _game.scale.X;
txtTest.Height = 70 * _game.scale.Y;

txtTest.MaxLength = 10;
txtTest.Text = string.Empty;
txtTest.Visibility = Visibility.Visible;
txtTest.Opacity = 0;

当我们第一次运行它时,一切都很好,但最近它停止了工作。问题是文本框被创建并且所有值都被设置但它只是没有显示。文本框有一个位置和 Visibility.Visible 所以它应该只是绘制但它没有。

这目前仅在 Surface Pro 或 Acer W500 等原生触控设备上发生。在 RT 设备上运行或在桌面上运行时,它工作得很好,我们可以用鼠标点击它,但是在运行 Touch Enabled 设备时,甚至 Handlers 都不会触发,感觉就像文本框不存在一样。即使我将焦点设置在它上面,也没有任何反应。

有人有任何线索吗?

4

1 回答 1

0

Windows 8 具有将 DPI Scale 强制到 Metro 应用程序的奇怪行为,这尤其会影响 XAML 元素。如果您在 1920x1080 的 10,1" 屏幕上运行游戏,则 DPI 比例为 140,因此您的有效分辨率将为

1920 / 1,4 = 1371 1080 / 1,4 = 771

由于在问题中我将 margin.top 放在 770 上,您将在最后一个像素中绘制文本框,因此由于 1371x771 的有效分辨率而看不到它被绘制

因此,正确的方法是检查比例因子是多少,然后将您的边距除以该值。

var scaler = 1f;

if (Windows.Graphics.Display.DisplayProperties.ResolutionScale == Windows.Graphics.Display.ResolutionScale.Scale180Percent)
{
     scaler = 1.8f;
}
else if (Windows.Graphics.Display.DisplayProperties.ResolutionScale == Windows.Graphics.Display.ResolutionScale.Scale140Percent)
{
     scaler = 1.4f;
}
else if (Windows.Graphics.Display.DisplayProperties.ResolutionScale == Windows.Graphics.Display.ResolutionScale.Scale100Percent)
{
     scaler = 1.0f;
}

Thickness margin = txtTest.Margin;
margin.Left = (1350 * _game.scale.X) / scaler;
margin.Top = (765 * _game.scale.Y) / scaler;
margin.Bottom = (220 * _game.scale.Y) / scaler;
margin.Right = (250 * _game.scale.X) / scaler;
txtTest.Margin = margin;

这将修复它并以正确的方式初始化文本框。

于 2013-10-14T21:07:50.377 回答