如何创建可重用的路径样式以显示自定义形状?

时间:2012-10-15 18:44:03

标签: windows-phone-7 xaml

我正在试图弄清楚如何为资源字典中的路径重用样式(特别是Data属性)。

这是我的问题:

ResourceDictionary.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" />

1 个答案:

答案 0 :(得分:1)

没有汗水,只需将其变成内容控件;

<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每个实例,以便优化事物。它还允许您(如果您需要/需要)将依赖项属性(如宽度/高度/对齐/边距)或您需要的任何内容绑定到模板,以便您可以在需要时将其指定为内联,或者您可以保留它们的硬编码值,如你有他们。希望这会有所帮助。