我正在尝试弄清楚如何为资源字典上的路径重用样式(特别是 Data 属性)。
这是我的问题:
资源词典.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="Path" x:Key="FlashOn">
<Setter Property="Data">
<Setter.Value>
F1M376.251,632.755L385.665,632.755 381.302,646.07 394.618,646.07 389.11,660.302 393.01,660.302 381.531,672.93 377.398,660.763 381.073,660.763 383.829,652.268 369.825,652.268 376.251,632.755z
</Setter.Value>
</Setter>
<Setter Property="Fill" Value="#FFFFFF"></Setter>
<Setter Property="Stretch" Value="Fill"></Setter>
<Setter Property="Height" Value="25"></Setter>
<Setter Property="Width" Value="25"></Setter>
</Style>
</ResourceDictionary>
并尝试在这样的页面上使用它:
<Path Style="{StaticResource FlashOn}"/>
或者像这样
System.Windows.Shapes.Path p = new System.Windows.Shapes.Path();
p.Style = Application.Current.Resources["FlashOn"] as Style;
我第一次加载页面时,形状将完美显示,但是如果我返回然后再次转到该页面,则除了根本没有任何信息的数据外,所有样式都可用。因此,我可以在自定义形状中设置除 Data 属性之外的所有属性的样式。
**请注意,如果样式是内联的,则一切正常。如果我在应用程序中多次使用相同的路径,我只是不想重复代码。
<Path Width="25" Height="25" Stretch="Fill" Fill="#FFFFFF" Data="F1M376.251,632.755L385.665,632.755 381.302,646.07 394.618,646.07 389.11,660.302 393.01,660.302 381.531,672.93 377.398,660.763 381.073,660.763 383.829,652.268 369.825,652.268 376.251,632.755z" />
没有汗水,只需将其变成内容控件即可;
<Style x:Key="MyAwesomePath" TargetType="ContentControl">
<!-- Add additional Setters Here -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ContentControl">
<Path Data="F1M376.251,632.755L385.665,632.755 381.302,646.07 394.618,646.07 389.11,660.302 393.01,660.302 381.531,672.93 377.398,660.763 381.073,660.763 383.829,652.268 369.825,652.268 376.251,632.755z"
Fill="#FFFFFFFF"
Stretch="Fill"
Height="25" Width="25"
HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
VerticalAlignment="{TemplateBinding VerticalAlignment}"
Margin="{TemplateBinding Margin}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
然后调用它;
<ContentControl Style="{StaticResource MyAwesomePath}"/>
这会为你做一些事情,比如不让你的应用在每个实例都重新绘制 Path,从而优化内容。它还允许您(如果需要/需要)将依赖项属性(如宽度/高度/对齐/边距)或任何您需要的内容绑定到模板,以便您可以在需要时内联指定它们,或者您可以保留它们硬编码值,就像您拥有它们一样。希望这有帮助。