我有一个Viewport3D
我想在两个照明条件之间交替。每个光照条件都将Model3DGroup
包含一个或多个光照(DirectionalLight
、AmbientLight
等)。
我打算使用DataTrigger
,但我不知道应该使用哪个对象和哪些属性,因为Model3DGroup
它的直接父级 ( ModelVisual3D
) 没有Style
属性。如果我Style
在Viewport3D
自身中使用Setter.TargetName
属性,则无法识别目标,如下面的代码所示:
<CheckBox x:Name="shadows" Content="Shadows" />
<Viewport3D>
<Viewport3D.Resources>
<Model3DCollection x:Key="shaded_light">
<DirectionalLight Color="White" Direction="-1,-1, -10" />
</Model3DCollection>
<Model3DCollection x:Key="solid_light">
<AmbientLight Color="White" />
</Model3DCollection>
</Viewport3D.Resources>
<Viewport3D.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=shadows, Path=IsChecked}" Value="True">
<!-- The setter below doesn't work: "The name 'lightsource' is not recognized" -->
<Setter TargetName="lightsource" Property="Content" Value="{StaticResource shaded_light}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Viewport3D.Style>
<Viewport3D.Camera>
<OrthographicCamera LookDirection="0,0,-1" Position="0,0,500" UpDirection="0,1,0" Width="400"/>
</Viewport3D.Camera>
<ModelVisual3D x:Name="lightsource">
<ModelVisual3D.Content>
<Model3DGroup Children="{StaticResource solid_light}" />
</ModelVisual3D.Content>
</ModelVisual3D>
(...)