间隔均匀破折号和StrokeDashArray(Evenly Spaced Dashes with

2019-07-29 15:30发布

我试图创建一个筹码就像一个在这里: http://www.casinowholesalers.com/shop/product_info.php?cPath=57&products_id=379使用Expression Blend的4对WP7.1的Silverlight 4应用程序。

我试图在芯片(忽略现在的骰子图像和内部虚线)的边缘创建六白“盒子”。 我的方式做到了两岁创建两个椭圆,一个没有中风,另一个是完全相同的尺寸,但与24中风,白的颜色,StrokeDashArray 1.8(这是不是“18”,它实际上是1.8不具有第二值)。 它看起来相当接近均匀大小和间隔(但不完全); 我发现它的试验和错误。 该XAML如下。

<Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Ellipse Fill="#FFC83838" Margin="112,253,128,275" Grid.Row="1" Stroke="#FFC83838" StrokeThickness="3"/>
    <Ellipse Fill="#FFC83838" Margin="112,253,128,275" Grid.Row="1" Stroke="White" StrokeThickness="30" StrokeDashArray="1.79" StrokeDashOffset="6" RenderTransformOrigin="0.5,0.5"/>
</Grid>

我想我有两个问题:

  1. 有没有更好的方式来创建除了使用两个椭圆这种形状?
  2. 我怎样才能在数学上确定StrokeDashArray值应该是什么,因此短线间隔均匀,尺寸,而不是使用试验和错误?

Answer 1:

我会从第二点开始。

第一,内逻辑StrokeDashArray说明这里 。 重要的一点是,冲程破折号阵列不是用像素表示,它是依赖于行程的厚度以得到最终的像素值的阵列中的每个号码。

因此,对于数学部分,让我们定义一些变量:

  1. 的S - 行程的可见部分(相同的链接)。
  2. ģ - 行程的不可见部分(与在链接)。
  3. 的R - 你的芯片的半径。 这将是一半的实际高度的实际宽度或一半。
  4. N - 您希望S +的G重复的次数。 整数。
  5. 笔 - 冲程厚度
  6. p - 数学PI(3.14 ...)

因此,我们有:

2*p*r = n*(T*S+T*G)

要么,

S+G = 2pr/nT

在你的情况,以及我从芯片的图像看,笔画的可见部分是正方形所以S = 1,有六个白色方块六分差距,因此n = 6,你决定为30PX因此T厚度= 30。 这给你G作为价值:

G = 2pr/180 - 1

您可以从混合得到r的值,实际宽度和高度将在括号中的宽度和高度框中写入 - 除以二。 从您提供的细节,我想半径为102.55。 而最后一搏虚线数组是:

StrokeDashArray="1,2.58"

为了您的第一点,答案是:这取决于。 如果你的芯片是整个应用程序的生命时间是相同的 - 这是最好的方式。 它给你的轻微弯曲的外令与芯片的外轮廓的“广场”齐平,这需要在设计时一次性计算。

即使你有不同大小的芯片,这可能是实现图形芯片的最好办法。 提供的,您可以用固定大小的设计,然后将其粘贴到一个ViewBox ,它仍然看起来不错。

如果有需要的变量大小和视图框路线不工作-有实现它(因为当你绑定到ActualWidth的\的ActualHeight属性Silverlight的失败),另一种方式-与Border持有矩形秒。 但它打开蠕虫的一个全新的就可以了,这个答案是足够长的时间。 :)



文章来源: Evenly Spaced Dashes with StrokeDashArray