Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF与Helix工具包,动画与代码隐藏?_C#_Wpf_Xaml_Helix 3d Toolkit - Fatal编程技术网

C# WPF与Helix工具包,动画与代码隐藏?

C# WPF与Helix工具包,动画与代码隐藏?,c#,wpf,xaml,helix-3d-toolkit,C#,Wpf,Xaml,Helix 3d Toolkit,我是WPF新手,正在尝试使用helix工具箱构建3d视口。 视口、栅格等显示如预期,我添加了一个简单的管状体。现在,我想根据用户输入使用一个新函数来更新管的变换,但我无法让它工作 我哪里出了问题 多谢各位 .xaml .xaml.cs using HelixToolkit.Wpf; namespace WPFUserControl { /// <summary> /// Interaction logic for UserControl1.xaml //

我是WPF新手,正在尝试使用helix工具箱构建3d视口。 视口、栅格等显示如预期,我添加了一个简单的管状体。现在,我想根据用户输入使用一个新函数来更新管的变换,但我无法让它工作

我哪里出了问题

多谢各位

.xaml


.xaml.cs

using HelixToolkit.Wpf;

namespace WPFUserControl
{
    /// <summary>
    /// Interaction logic for UserControl1.xaml
    /// </summary>
    public partial class UserControl1 : UserControl
    {
        public TubeVisual3D tube1 = new TubeVisual3D();

        public UserControl1()
        {

            InitializeComponent();
            DataContext = this;
            Setup();

        }


        public void SetTranslation(double xx) //this is called from an external app.
        {

             Console.Write(xx); //This prints as expected.

            //TranslateTransform3D Trans = new TranslateTransform3D(new Vector3D(xx, 0, 0));     
          //  tube1.Transform = Trans;  //this does not work.

        }

        public void Setup()
        {             
            int tubeDiameter = 5;
            tube1.Path = new Point3DCollection();
            tube1.Path.Add(new Point3D(-15, 0, 0));
            tube1.Path.Add(new Point3D(15, 0, 0));
            tube1.Diameter = tubeDiameter;
            tube1.Fill = Brushes.Red;
            tube1.IsPathClosed = false;

            MainViewPort.Children.Add(tube1);

        }

    }
}
使用HelixToolkit.Wpf;
命名空间WPFUserControl
{
/// 
///UserControl1.xaml的交互逻辑
/// 
公共部分类UserControl1:UserControl
{
public TubeVisual3D tube1=新TubeVisual3D();
公共用户控制1()
{
初始化组件();
DataContext=this;
设置();
}
public void SetTranslation(double xx)//这是从外部应用程序调用的。
{
Console.Write(xx);//按预期打印。
//TranslateTransform3D Trans=新TranslateTransform3D(新向量3D(xx,0,0));
//tube1.Transform=Trans;//这不起作用。
}
公共作废设置()
{             
内径=5;
tube1.Path=newpoint3dcollection();
tube1.Path.Add(新的Point3D(-15,0,0));
tube1.Path.Add(新的Point3D(15,0,0));
管1.直径=管直径;
管1。填充=刷子。红色;
tube1.IsPathClosed=假;
MainViewPort.Children.Add(tube1);
}
}
}

您必须在调度程序线程上。请尝试Dispatcher.Invoke(感谢您的响应!因此在我的SetTranslation函数中,我添加了如下内容:
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background,新操作(()=>{tube1.Transform=Trans;}))
看起来对吗?据我所知,UserControl有一个Dispatcher成员。因此您不需要Application.Current。但这也应该可以。好的。再次感谢您的帮助。在卷曲的brakets中创建TranslationTransform:Dispatcher.BeginInvoke(DispatcherPriority.Background,新操作(()=>{TranslateTransform3D Trans=new TranslateTransform3D(new Vector3D(xx,0,0));tube1.Transform=Trans;});您必须在调度程序线程上。尝试Dispatcher.Invoke(感谢您的响应!因此在我的SetTranslation函数中,我添加了类似于:
Application.Current.Dispatcher.BeginInvoke的内容(DispatcherPriority.Background,新操作(()=>{tube1.Transform=Trans;}))
看起来对吗?据我所知,UserControl有一个Dispatcher成员。因此您不需要Application.Current。但这也应该可以。好的。再次感谢您的帮助。在卷曲的brakets中创建TranslationTransform:Dispatcher.BeginInvoke(DispatcherPriority.Background,新操作(()=>{TranslateTransform3D Trans=new TranslateTransform3D(new Vector3D(xx,0,0));tube1.Transform=Trans;});
using HelixToolkit.Wpf;

namespace WPFUserControl
{
    /// <summary>
    /// Interaction logic for UserControl1.xaml
    /// </summary>
    public partial class UserControl1 : UserControl
    {
        public TubeVisual3D tube1 = new TubeVisual3D();

        public UserControl1()
        {

            InitializeComponent();
            DataContext = this;
            Setup();

        }


        public void SetTranslation(double xx) //this is called from an external app.
        {

             Console.Write(xx); //This prints as expected.

            //TranslateTransform3D Trans = new TranslateTransform3D(new Vector3D(xx, 0, 0));     
          //  tube1.Transform = Trans;  //this does not work.

        }

        public void Setup()
        {             
            int tubeDiameter = 5;
            tube1.Path = new Point3DCollection();
            tube1.Path.Add(new Point3D(-15, 0, 0));
            tube1.Path.Add(new Point3D(15, 0, 0));
            tube1.Diameter = tubeDiameter;
            tube1.Fill = Brushes.Red;
            tube1.IsPathClosed = false;

            MainViewPort.Children.Add(tube1);

        }

    }
}