在Windows 8(WinRT)应用程序中,我创建自己的XAML样式以获得虚线矩形。在样式的setter中,我使用Property="StrokeDashArray" Value="1,4"
。然后我创建了一堆矩形,然后将这些矩形的样式显式设置为我创建的这种样式。第一个矩形显示为带有虚线的边框 - 但其他两个则不显示。但是,如果除了Style={StaticResource myDottedStyle}
之外,我还为每个矩形指定了StrokeDashArray
,那么所有这些矩形都会正确地显示为虚线边框。
为什么虚线边框仅显示第一个矩形?如何创建一个应用于所有矩形的Style
而不为每个矩形指定StrokeDashArray?
这是一个完整的代码示例。在Windows 8 RTM中,创建一个Blank 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>
Here is a screenshot of the output of this
我发现了一个涉及DataTemplates here的相关问题,但我无法弄清楚如何将其转化为我的问题。
答案 0 :(得分:2)
您可以通过不要求每个实例重新绘制矩形并替换ContentControl来优化一些事情,因为它们看起来相同但有细微差别。例如,像<; p>这样的东西
<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"/>
这样你不仅可以清理东西,因为你可以把你的Style模板打成一片,然后把它打成一个资源字典,以减少混乱,但也可以让它更有效率,因为你没有重新绘制你的每次需要时塑造。希望这可以帮助!干杯!