2

リソースディクショナリにあるパスのスタイル(具体的には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" />
4

1 に答える 1

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}"/>

これにより、アプリがインスタンスごとにパスを再描画しないようにするなど、いくつかのことが行われます。また、(必要に応じて)Width / Height / Alignment / Marginなどの依存関係プロパティをテンプレートにバインドできるため、必要に応じてインラインで指定したり、ハードコードされた値を保持したりできます。あなたはそれらを持っています。お役に立てれば。

于 2012-10-15T18:58:02.720 に答える