如何将ItemsPanelRoot转换为SwapChainPanel

时间:2016-12-04 13:49:22

标签: c# xaml 3d uwp itemscontrol

我在UWP平台上使用HelixToolkit。最近我试图改变它的一些功能,所以我写了一个新的视口,模仿HelixToolkit中的一个。这是我遇到的一个问题,在HelixToolkit中没有发生。

要在Viewport(从ItemsControl类派生的类)中创建SwapChainPanel,HelixToolkit会直接将ItemsPanelRoot转换为SwapChainPanel。

this.d3dTarget = new SwapChainTarget((SwapChainPanel)this.ItemsPanelRoot, this);

但是,当我的代码到达此行时,运行时会弹出一个异常:

  

System.InvalidCastException:无法转换类型的对象   ' Windows.UI.Xaml.Controls.StackPanel'输入   ' Windows.UI.Xaml.Controls.SwapChainPanel'

在施法前暂停,我明白了 enter image description here 为什么显示StackPanel?

如果我在HelixToolkit之前暂停,它会显示一堆内部异常。

这两种差异之间可能是什么原因?是否有另一种方法可以以包装的方式创建交换链以包含其他项目?

1 个答案:

答案 0 :(得分:2)

您引用的行不会创建SwapChainPanel,只会检索SwapChainPanel中放置的ItemsPanelTemplate

这发生在这里:https://github.com/helix-toolkit/helix-toolkit/blob/d386c9e1313ae1bbb1c179a17007e9b59ae221a6/Source/HelixToolkit.UWP/Themes/Generic.xaml

<Style TargetType="controls:Viewport3DX">
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <SwapChainPanel/>
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
</Style>

如果您想重现相同的行为,请确保相应地设置ItemsPanelTemplate的{​​{1}}。