Search code examples
wpfhelix-3d-toolkit

How do I convert the following xaml statement to code?


Similar questions were asked many times, but I cannot quite make them work. How would I create C# version of the following xalm statement:

        <h:TubeVisual3D x:Name="PipeVisual" Path="{Binding Pipe.Path}" 
                        TextureCoordinates="{Binding Pipe.TextureCoordinates}"
                        Diameter="{Binding ElementName=PipeDiamSlider, Path= Value }" 
                        Material="{Binding Pipe.Material}"
                        BackMaterial="{Binding Pipe.Material}"
                        ThetaDiv="50" IsPathClosed="False"
                        Visible="{Binding ElementName=PipeIsVisibleCheck, Path=IsChecked}"/>

Where “TubeVisual3D” is a 3D WPF element defined in Helix Toolkit and most of the parameters bound by the binding are dependency properties in “TubeVisual3D”.


Solution

  • The equivalent to your markup would be this:

    HelixToolkit.Wpf.TubeVisual3D pipeVisual = new HelixToolkit.Wpf.TubeVisual3D();
    BindingOperations.SetBinding(pipeVisual, HelixToolkit.Wpf.ExtrudedVisual3D.PathProperty, new Binding("Pipe.Path"));
    BindingOperations.SetBinding(pipeVisual, HelixToolkit.Wpf.ExtrudedVisual3D.TextureCoordinatesProperty, new Binding("Pipe.TextureCoordinates"));
    BindingOperations.SetBinding(pipeVisual, HelixToolkit.Wpf.TubeVisual3D.DiameterProperty, new Binding("Value") { Source = PipeDiamSlider });
    BindingOperations.SetBinding(pipeVisual, HelixToolkit.Wpf.MeshElement3D.MaterialProperty, new Binding("Pipe.Material"));
    BindingOperations.SetBinding(pipeVisual, HelixToolkit.Wpf.MeshElement3D.BackMaterialProperty, new Binding("Pipe.Material"));
    pipeVisual.ThetaDiv = 50;
    pipeVisual.IsPathClosed = false;
    BindingOperations.SetBinding(pipeVisual, HelixToolkit.Wpf.MeshElement3D.VisibleProperty, new Binding("IsChecked") { Source = PipeIsVisibleCheck });