C# 在WPF中加载vtk的RenderWindowControl时出现NullReferenceException
我正在尝试使用ActiViz.NET和Visual Studio 2013从WPF项目上的vtk库加载RenderWindowControl。这个库工作得很好,因为我做了一个新项目只是为了练习它,但是当我试图将它集成到我的工作中时,这次我得到了一个空的RenderWindowControl。这是我的代码: MainWindow.xaml:C# 在WPF中加载vtk的RenderWindowControl时出现NullReferenceException,c#,wpf,xaml,nullreferenceexception,vtk,C#,Wpf,Xaml,Nullreferenceexception,Vtk,我正在尝试使用ActiViz.NET和Visual Studio 2013从WPF项目上的vtk库加载RenderWindowControl。这个库工作得很好,因为我做了一个新项目只是为了练习它,但是当我试图将它集成到我的工作中时,这次我得到了一个空的RenderWindowControl。这是我的代码: MainWindow.xaml: <Window x:Class="myProject.Views.MainWindow" xmlns="http://schemas.micro
<Window x:Class="myProject.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:VtkTab="clr-namespace:myProject.Views.UITabs.VtkTab"
x:Name="Mainwindow"
MinHeight="600"
MinWidth="800"
Title="{Binding Title}"
Height="720"
Width="1280"
Icon="{StaticResource ApplicationIcon}"
Loaded="OnLoaded"
DataContext="{Binding Main, Source={StaticResource ViewModelLocator}}"
Style="{StaticResource WindowStyle}"
mc:Ignorable="d">
<DockPanel>
<TabControl>
....
....
<VtkTab:VtkTabView />
....
....
</TabControl>
</DockPanel>
</Window>
RenderControl.RenderWindow在WindowLoaded(VtkTabView.xaml.cs)上为空,我不知道为什么。可能是因为我从第二个xamp加载UITabView,而我丢失了RenderControl?的内容,这是我看到的与我所做的示例的唯一区别 访问RenderWindow控件的RenderWindow加载事件 e、 g
很好,它解决了NullReferenceException的问题。谢谢你,伙计@Benjaminidele:“他问他为什么会得到它”--是的,这是“什么是NullReferenceException以及如何修复它?”的第二部分,处理NRE相对来说是微不足道的,一篇帖子包含了99.94%的案例所需的所有信息。一篇询问如何修复NRE的帖子,而不描述实际采取了哪些步骤来调试问题,实际上是解释如何修复NRE的帖子的重复(因为我们必须假设OP没有对其进行调试)。
<UserControl x:Class="myProject.Views.UITabs.VtkTab.VtkTabView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vtk="clr-namespace:Kitware.VTK;assembly=Kitware.VTK"
Loaded="WindowLoaded"
Height="480" Width="640">
<WindowsFormsHost Name="Wfh">
<vtk:RenderWindowControl x:Name="RenderControl" />
</WindowsFormsHost>
</UserControl>
public partial class UITabView
{
protected static Random _random = new Random();
vtkActor actor = vtkActor.New();
public VtkTabView()
{
InitializeComponent();
var sphere = vtkSphereSource.New();
sphere.SetThetaResolution(8);
sphere.SetPhiResolution(16);
var shrink = vtkShrinkPolyData.New();
shrink.SetInputConnection(sphere.GetOutputPort());
shrink.SetShrinkFactor(0.9);
var move = vtkTransform.New();
move.Translate(_random.NextDouble(), _random.NextDouble(), _random.NextDouble());
var moveFilter = vtkTransformPolyDataFilter.New();
moveFilter.SetTransform(move);
moveFilter.SetInputConnection(shrink.GetOutputPort());
var mapper = vtkPolyDataMapper.New();
mapper.SetInputConnection(moveFilter.GetOutputPort());
// The actor links the data pipeline to the rendering subsystem
actor.SetMapper(mapper);
actor.GetProperty().SetColor(1, 0, 0);
}
private void WindowLoaded(object sender, RoutedEventArgs e)
{
var renderer = RenderControl.RenderWindow.GetRenderers().GetFirstRenderer();
renderer.AddActor(actor);
}
}
public VtkTabView()
{
InitializeComponent();
// initialize your sphrere and actor
RenderControl.Load += MyRenderWindowControlOnLoad;
}
private void MyRenderWindowControlOnLoad(object sender_in, EventArgs eventArgs_in){
//access the RenderWindow here
}