2

Windows 8 (WinRT) アプリで、点線の四角形を取得する独自の XAML スタイルを作成しています。スタイルのセッターでは、 を使用していますProperty="StrokeDashArray" Value="1,4"。次に、一連の四角形を作成し、それらの四角形のスタイルを、作成したこのスタイルに明示的に設定します。最初の長方形は点線の境界線で表示されますが、他の 2 つの長方形は表示されません。ただし、に加えて、各長方形でStyle={StaticResource myDottedStyle}も指定すると、すべてが点線の境界線で正しく表示されます。StrokeDashArray

点線の境界線が最初の四角形にしか表示されないのはなぜですか? Styleそれぞれに StrokeDashArray を指定せずに、すべての長方形に適用されるを作成するにはどうすればよいですか?

完全なコード サンプルを次に示します。Windows 8 RTM で、空の XAML アプリ プロジェクトを作成し、MainPage.xaml の Grid を次のものに置き換えます。

<Page.Resources>
    <Style x:Key="myDottedStyle" TargetType="Rectangle">
        <Setter Property="Stroke" 
            Value="{StaticResource ApplicationForegroundThemeBrush}"/>
        <Setter Property="StrokeThickness" Value="2"/>
        <Setter Property="StrokeDashArray" Value="1,4"/>
    </Style>
</Page.Resources>

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <Rectangle Style="{StaticResource myDottedStyle}" Width="40" 
        HorizontalAlignment="Left"/>
    <Rectangle Style="{StaticResource myDottedStyle}" Width="40" 
        HorizontalAlignment="Center"/>
    <Rectangle Style="{StaticResource myDottedStyle}" Width="40" 
        HorizontalAlignment="Right"/>
</Grid>

これは、この出力のスクリーンショットです

ここでDataTemplates について話している関連する質問を見つけましたが、それを自分の問題に変換する方法がわかりません。

4

1 に答える 1

2

インスタンスごとに四角形を再描画する必要がなく、代わりに ContentControl を置き換えることで、少し最適化できます。これらは同じように見えますが、わずかな違いがあるためです。たとえば、次のようなものです。

<Style x:Key="MyDottedStyle" TargetType="ContentControl">
    <!-- Add additional Setters Here -->
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ContentControl">
                <Rectangle Stroke="{StaticResource ApplicationForegroundThemeBrush}"
                       StrokeThickness="2"
                       StrokeDashArray="1,4"
                       Width="40" Height="40"
                       HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
                       Margin="{TemplateBinding Margin}"/>                                          
            </ControlTemplate>
        </Setter.Value>
    </Setter>                      
</Style>

    <!-- And now actually place it on your view -->
<ContentControl Style="{StaticResource MyDottedStyle}" HorizontalAlignment="Center"/>

これにより、スタイル テンプレートを取り、それをリソース ディクショナリに平手打ちして混乱を減らすことができるため、物事を整理できるだけでなく、毎回形状を再描画する必要がないため、少し効率的になります。必須です。お役に立てれば!乾杯!

于 2012-09-21T14:49:38.057 に答える