WPF在运行时改变材料的颜色

时间:2014-09-21 04:53:06

标签: wpf binding 3d

我尝试了几种替代方法来在运行时更改3D形状的颜色。最后一个尝试是通过创建一个新类" MyMaterial"如下:

public class MyMaterial : INotifyPropertyChanged
{
    private Material amaterial;

    public MyMaterial() { }

    public MyMaterial(Material thematerial)
    {
        amaterial = thematerial;
    }

    public Material material
    {
        get { return amaterial; }
        set
        {
            amaterial = value;
            OnPropertyChanged("TheMaterial");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string info)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(info));
        }
    }
}

然后使用以下程序绑定'材料'上面类的实例的属性为GeometryModel3D的形状的MaterailProperty,如下面的过程所示:

    private MyMaterial bindMaterialPropertyOfModel3dGroupToMaterial(GeometryModel3D model, MyMaterial myNewmaterial)
    {

        Binding myBinding = new Binding("TheMaterial");
        myBinding.Source = myNewmaterial;
        BindingOperations.SetBinding(model, GeometryModel3D.MaterialProperty, myBinding);

        return myNewmaterial;
    }

无论何时我想改变形状的颜色,我都会用新颜色创建一个新材质并将这个新材质设置为上述MyMaterial实例,期望看到这个变化反映在形状的MaterialProperty中,如,我相信,这应该是由于两者之间的约束,但是没有发生

我对绑定知之甚少。我认为目标属性需要是依赖属性,而形状的GeometryModel3D的MaterialProperty是正确的吗?

有人可以告诉我,我做错了什么吗?如果通过这种类型的绑定无法实现在运行时更改颜色的目的,有人可以告诉我如何有其他方法来实现它吗?

0 个答案:

没有答案