我尝试了几种替代方法来在运行时更改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是正确的吗?
有人可以告诉我,我做错了什么吗?如果通过这种类型的绑定无法实现在运行时更改颜色的目的,有人可以告诉我如何有其他方法来实现它吗?