我在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'
如果我在HelixToolkit之前暂停,它会显示一堆内部异常。
这两种差异之间可能是什么原因?是否有另一种方法可以以包装的方式创建交换链以包含其他项目?
答案 0 :(得分:2)
您引用的行不会创建SwapChainPanel
,只会检索SwapChainPanel
中放置的ItemsPanelTemplate
。
<Style TargetType="controls:Viewport3DX">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<SwapChainPanel/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
如果您想重现相同的行为,请确保相应地设置ItemsPanelTemplate
的{{1}}。