绘制WPF形状,作为矩形:如果描边是透明的,则StrokeThickness减半

问题描述 投票:0回答:2

问题:我有一些UCControl而不是设计几何形状。我可以在运行时配置尺寸(尺寸和笔划粗细),颜色(背景和笔划),所有工作都很好,直到我使用纯色。如果我使用,对于笔划,透明刷子出现问题:形状显示正确的尺寸和颜色,但strokethikness是减半。

<Grid x:Name="_grid" >
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <Rectangle Grid.Row="0" Grid.Column="0" Margin="0,0,0,0"
        Width="{Binding ActualWidth, ElementName=_grid}"
        Height="{Binding ActualHeight, ElementName=_grid}" 
        Stroke="{Binding Rectangle.BorderColorBrush}"
        StrokeThickness="{Binding Rectangle.Thick}" 
        Fill="{Binding Rectangle.BackgroundBrush}"/>

</Grid>

我需要的是,如果笔划是纯色或透明,则绘图上的笔划粗细是相同的。我在这一刻发现了这一点:布朗是背景色,黑色或透明笔触。 StrokeThickness对于两者都是20(参见点网格:距离10)render

c# wpf visual-studio-2013 stroke
2个回答
1
投票

矩形或椭圆元素的StrokeThickness有助于其总宽度和高度,而底层几何体的实际轮廓位于笔划的中心。当你使用像这样的虚线笔划时,这变得非常明显

<Rectangle Width="100" Height="100" Fill="Red" Stroke="Black"
           StrokeThickness="10" StrokeDashArray="1 1"/>

结果如下:

enter image description here

填充区域的大小仅为90 x 90。

对于精确所需大小的填充区域,请使用带有RectangleGeometry的Path:

<Path Fill="Red" Stroke="Black" StrokeThickness="10" StrokeDashArray="1 1">
    <Path.Data>
        <RectangleGeometry Rect="0,0,100,100"/>
    </Path.Data>
</Path>

结果:

enter image description here


0
投票

在这种特殊情况下,我需要使用StrokeThickness作为形状周围的边框,如果我想要边框大小为20,我需要在形状周围设置20个边框,如果颜色是纯色或透明,则无关紧要,以及形状(边框+背景)的总大小不得变异。因此,考虑如何绘制笔划(它使形状的内部偏移,对于StrokeThickness的一半,并在内部绘制半笔划,在此偏移之外的半笔划),如果笔触颜色是透明的,我只需要复制StrokeThickness。是的,它有点令人困惑,我希望它清晰而有用...这里的代码只适用于Rectangle.StrokeThickness元素:

<Rectangle.StrokeThickness>
    <MultiBinding Converter="{StaticResource MyConverter}">
        <Binding Path="Rectangle.Thick"></Binding>
        <Binding Path="Rectangle.BorderColorBrush"></Binding>
    </MultiBinding>
</Rectangle.StrokeThickness>

..and转换器只复制Rectangle.Thick值if(Rectangle.BorderColorBrush == Brushes.Transparent)。最终结果是我想要的:

final draw

© www.soinside.com 2019 - 2024. All rights reserved.