x64 上的 ScatterView 运行时异常

ScatterView runtime exception on x64

我遇到了与描述相同的问题 here

我们使用旧的 Microsoft Surface 2.0 SDK. 开发了几个应用程序,这些应用程序构建为 AnyCPU,并且这些应用程序在 32 位和 64 位模式下工作得很好 运行。在其中一个应用程序中,我使用了 ScatterView

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:s="http://schemas.microsoft.com/surface/2008"
    Title="MainWindow" Height="350" Width="525">
    <Grid>
        <s:ScatterView x:Name="timeline">
            <Rectangle></Rectangle>
        </s:ScatterView>
    </Grid>
</Window>

但是,如果我尝试在新的空白 Window 中添加新的 ScatterView,我会收到此错误:

{"The type initializer for 'Microsoft.Surface.Core.InteractiveSurface' threw an exception."}

System.TypeInitializationException was unhandled
HResult=-2146233036
Message=The type initializer for 'Microsoft.Surface.Presentation.Input.InteractiveSurface'  threw an exception.
Source=Microsoft.Surface.Presentation
TypeName=Microsoft.Surface.Presentation.Input.InteractiveSurface

如果我在 32 bit 中强制应用程序 运行 它 运行 完美。然而,该应用程序非常占用内存,所以我也想 运行 它在 64 bit 中。

我的问题是:为什么我当前应用程序中的 ScatterView 运行 完美地支持 64 位,但向该应用程序添加了一个额外的 ScatterView 或创建了一个 brend新应用程序立即崩溃。不幸的是,前面问题给出的答案已经死了link。

当然,经过 48 小时的搜索,我找到了解决我自己问题的方法。

当您在 ScatterView 中添加项目时,会调用 Microsoft.Surface.Presentation.Controls.ScatterCanvas 中的函数 GetItemOrientation。这个函数决定了ScatterViewItem的旋转。当 运行在 64bit 中连接您的应用程序时,此方法失败并抛出异常,这可能是由于调用本机方法以确定 SUR40 应 运行 的方向引起的.

解法: 您可以通过自己在 ScatterViewItem 上设置 Orientation 属性 或设置 ScatterViewItem.CanRotate = false 来禁用对 GetItemOrientation 的函数调用。