我为我的应用程序中的所有图像设置了图像的默认样式(放入应用程序资源中):
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Setter Property="Opacity" Value="0.3"/> <!--To obviously see that it works-->
<Setter Property="RenderOptions.BitmapScalingMode" Value="HighQuality" />
<Setter Property="SnapsToDevicePixels" Value="True" />
</Style>
</ResourceDictionary>
如果我在其他地方有一个像
这样的风格的图像<Image>
<Image.Style>
<Style TargetType="{x:Type Image}">
... set some other properties here
</Style>
</Image.Style>
</Image>
未应用基本样式。如果我放一个
BasedOn="{StaticResource {x:Type Image}}"
一切都符合(I)预期。
有没有办法在不经过我所有的xaml的情况下应用默认样式并将BasedOn
添加到每个样式化的图像?
修改
我经常会有某种DataTriggers:
<Image>
<Image.Style>
<Style TargetType="{x:Type Image}" >
<Style.Triggers>
<DataTrigger Binding="{Binding Type}" Value="VAR1">
<Setter Property="Source" Value="/MyApp;component/Resources/Var1.png"/>
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="VAR2">
<Setter Property="Source" Value="/MyApp;component/Resources/Var2.png"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
答案 0 :(得分:0)
因此,通过声明新样式,您可以有效地覆盖默认样式。 BasedOn
是从另一个样式模板继承元素所必需的(在这种情况下是默认值),所以你看到的是预期的结果。
但是,您可以放弃其他模板,只需在实例级别声明属性,这样就不需要引用其他模板了。
所以不要像现在这样使用新模板;
<Image>
<Image.Style>
<Style TargetType="{x:Type Image}">
... set some other properties here
</Style>
</Image.Style>
</Image>
您只需插入属性,如
<Image Property="Value" Property="Value" Property="Value"/>
然后Image
仍将继承默认值,但只会在实例而不是整个模板中覆盖特定属性。
希望这有帮助。