2

在 Windows 8 (WinRT) 应用程序中,我正在创建自己的 XAML 样式以获得虚线矩形。在样式的设置器中,我使用Property="StrokeDashArray" Value="1,4". 然后我创建了一堆矩形,然后将这些矩形的样式显式设置为我创建的这种样式。第一个矩形显示有虚线边框 - 但其他两个没有。但是,如果除了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 回答