WPF线路问题
我正在尝试制作一个非常简单的红色X按钮,类似于鼠标悬停在X上关闭Google Chrome标签。线条控件似乎尊重其底部和右侧的边界,但在顶部和左侧突出,我不知道如何修复它(除了给它们看似任意的边距以迫使它们屈服之外)。。。我有以下XAML:WPF线路问题,wpf,xaml,Wpf,Xaml,我正在尝试制作一个非常简单的红色X按钮,类似于鼠标悬停在X上关闭Google Chrome标签。线条控件似乎尊重其底部和右侧的边界,但在顶部和左侧突出,我不知道如何修复它(除了给它们看似任意的边距以迫使它们屈服之外)。。。我有以下XAML: <Grid Background="Black"> <Ellipse Height="15" Width="15" Fill="Red" HorizontalAlignment="Center" VerticalAlignment=
<Grid Background="Black">
<Ellipse Height="15" Width="15" Fill="Red" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Line X1="0" Y1="0" X2="10" Y2="10" HorizontalAlignment="Center" VerticalAlignment="Center" Stroke="White" StrokeThickness="1" StrokeStartLineCap="Round" StrokeEndLineCap="Round"/>
<Line X1="0" Y1="10" X2="10" Y2="0" HorizontalAlignment="Center" VerticalAlignment="Center" Stroke="White" StrokeThickness="1" StrokeStartLineCap="Round" StrokeEndLineCap="Round"/>
</Grid>
第一个问题是线条从左上角到右下角:
我选择了显示边界框的线。请注意,该线如何在左上角从椭圆(及其边界框)中伸出,但在右下角位于椭圆内部。难道这些行为不应该始终如一,要么都暴露出来,要么都保持在自己的范围内吗
第一条线至少穿过边界框角的中心,但第二条线最终会向上和向左移动:
他们似乎都尊重底部和右侧的边界,但从顶部和左侧的边界突出,这导致他们偏离中心。我能做些什么让他们按照我想要的方式行动呢?提前感谢。不知道为什么线帽仅在右侧和底部对线边界起作用,但作为一种解决方法,您可以在画布中居中绘制所有内容:
<Grid Background="Black">
<Canvas HorizontalAlignment="Center" VerticalAlignment="Center">
<Path Fill="Red">
<Path.Data>
<EllipseGeometry RadiusX="7.5" RadiusY="7.5"/>
</Path.Data>
</Path>
<Path Data="M-5,-5 L5,5 M-5,5 L5,-5" StrokeThickness="1"
Stroke="White" StrokeStartLineCap="Round" StrokeEndLineCap="Round"/>
</Canvas>
</Grid>
不知道为什么线帽仅在右侧和底部构成线边界,但作为一种解决方法,您可以在画布中居中绘制所有内容:
<Grid Background="Black">
<Canvas HorizontalAlignment="Center" VerticalAlignment="Center">
<Path Fill="Red">
<Path.Data>
<EllipseGeometry RadiusX="7.5" RadiusY="7.5"/>
</Path.Data>
</Path>
<Path Data="M-5,-5 L5,5 M-5,5 L5,-5" StrokeThickness="1"
Stroke="White" StrokeStartLineCap="Round" StrokeEndLineCap="Round"/>
</Canvas>
</Grid>
不知道为什么线帽仅在右侧和底部构成线边界,但作为一种解决方法,您可以在画布中居中绘制所有内容:
<Grid Background="Black">
<Canvas HorizontalAlignment="Center" VerticalAlignment="Center">
<Path Fill="Red">
<Path.Data>
<EllipseGeometry RadiusX="7.5" RadiusY="7.5"/>
</Path.Data>
</Path>
<Path Data="M-5,-5 L5,5 M-5,5 L5,-5" StrokeThickness="1"
Stroke="White" StrokeStartLineCap="Round" StrokeEndLineCap="Round"/>
</Canvas>
</Grid>
不知道为什么线帽仅在右侧和底部构成线边界,但作为一种解决方法,您可以在画布中居中绘制所有内容:
<Grid Background="Black">
<Canvas HorizontalAlignment="Center" VerticalAlignment="Center">
<Path Fill="Red">
<Path.Data>
<EllipseGeometry RadiusX="7.5" RadiusY="7.5"/>
</Path.Data>
</Path>
<Path Data="M-5,-5 L5,5 M-5,5 L5,-5" StrokeThickness="1"
Stroke="White" StrokeStartLineCap="Round" StrokeEndLineCap="Round"/>
</Canvas>
</Grid>
经过一些实验 您的问题在X1、X2、Y1、Y2中。你没有遵循数学规则来找到精确的值(如果你不记得像我这样的三角形和圆形方程,那么要找到它们就有点困难:) 我的解决方案是画两条直线,一条从上到下,一条从左到右,然后将它们旋转45度 结果如下所示: 代码很简单,我拉伸线并旋转它们,以便粘到边上
<Grid Background="Black" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="15" Height="15">
<Ellipse Height="15" Width="15" Fill="Red"/>
<Line X1="7.5" Y1="0" X2="7.5" Y2="15" HorizontalAlignment="Center" Stretch="Fill" VerticalAlignment="Center" Stroke="White" StrokeThickness="1" StrokeStartLineCap="Round" StrokeEndLineCap="Round" RenderTransformOrigin="0.5,0.5">
<Line.RenderTransform>
<RotateTransform Angle="45" />
</Line.RenderTransform>
</Line>
<Line X1="0" Y1="7.5" X2="15" Y2="7.5" HorizontalAlignment="Center" Stretch="Fill" VerticalAlignment="Center" Stroke="White" StrokeThickness="1" StrokeStartLineCap="Round" StrokeEndLineCap="Round" RenderTransformOrigin="0.5,0.5">
<Line.RenderTransform>
<RotateTransform Angle="45" />
</Line.RenderTransform>
</Line>
</Grid>
还请注意,我们将每条直线的旋转原点设置为0.5和0.5。这有点令人困惑(为什么不是0,0),但是这个链接将帮助您理解
经过一些实验 您的问题在X1、X2、Y1、Y2中。你没有遵循数学规则来找到精确的值(如果你不记得像我这样的三角形和圆形方程,那么要找到它们就有点困难:) 我的解决方案是画两条直线,一条从上到下,一条从左到右,然后将它们旋转45度 结果如下所示: 代码很简单,我拉伸线并旋转它们,以便粘到边上
<Grid Background="Black" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="15" Height="15">
<Ellipse Height="15" Width="15" Fill="Red"/>
<Line X1="7.5" Y1="0" X2="7.5" Y2="15" HorizontalAlignment="Center" Stretch="Fill" VerticalAlignment="Center" Stroke="White" StrokeThickness="1" StrokeStartLineCap="Round" StrokeEndLineCap="Round" RenderTransformOrigin="0.5,0.5">
<Line.RenderTransform>
<RotateTransform Angle="45" />
</Line.RenderTransform>
</Line>
<Line X1="0" Y1="7.5" X2="15" Y2="7.5" HorizontalAlignment="Center" Stretch="Fill" VerticalAlignment="Center" Stroke="White" StrokeThickness="1" StrokeStartLineCap="Round" StrokeEndLineCap="Round" RenderTransformOrigin="0.5,0.5">
<Line.RenderTransform>
<RotateTransform Angle="45" />
</Line.RenderTransform>
</Line>
</Grid>
还请注意,我们将每条直线的旋转原点设置为0.5和0.5。这有点令人困惑(为什么不是0,0),但是这个链接将帮助您理解
经过一些实验 您的问题在X1、X2、Y1、Y2中。你没有遵循数学规则来找到精确的值(如果你不记得像我这样的三角形和圆形方程,那么要找到它们就有点困难:) 我的解决方案是画两条直线,一条从上到下,一条从左到右,然后将它们旋转45度 结果如下所示: 代码很简单,我拉伸线并旋转它们,以便粘到边上
<Grid Background="Black" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="15" Height="15">
<Ellipse Height="15" Width="15" Fill="Red"/>
<Line X1="7.5" Y1="0" X2="7.5" Y2="15" HorizontalAlignment="Center" Stretch="Fill" VerticalAlignment="Center" Stroke="White" StrokeThickness="1" StrokeStartLineCap="Round" StrokeEndLineCap="Round" RenderTransformOrigin="0.5,0.5">
<Line.RenderTransform>
<RotateTransform Angle="45" />
</Line.RenderTransform>
</Line>
<Line X1="0" Y1="7.5" X2="15" Y2="7.5" HorizontalAlignment="Center" Stretch="Fill" VerticalAlignment="Center" Stroke="White" StrokeThickness="1" StrokeStartLineCap="Round" StrokeEndLineCap="Round" RenderTransformOrigin="0.5,0.5">
<Line.RenderTransform>
<RotateTransform Angle="45" />
</Line.RenderTransform>
</Line>
</Grid>
还请注意,我们将每条直线的旋转原点设置为0.5和0.5。这有点令人困惑(为什么不是0,0),但是这个链接将帮助您理解
经过一些实验 您的问题在X1、X2、Y1、Y2中。你没有遵循数学规则来找到精确的值(如果你不记得像我这样的三角形和圆形方程,那么要找到它们就有点困难:) 我的解决方案是画两条直线,一条从上到下,一条从左到右,然后将它们旋转45度 结果如下所示: 代码很简单,我拉伸线并旋转它们,以便粘到边上
<Grid Background="Black" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="15" Height="15">
<Ellipse Height="15" Width="15" Fill="Red"/>
<Line X1="7.5" Y1="0" X2="7.5" Y2="15" HorizontalAlignment="Center" Stretch="Fill" VerticalAlignment="Center" Stroke="White" StrokeThickness="1" StrokeStartLineCap="Round" StrokeEndLineCap="Round" RenderTransformOrigin="0.5,0.5">
<Line.RenderTransform>
<RotateTransform Angle="45" />
</Line.RenderTransform>
</Line>
<Line X1="0" Y1="7.5" X2="15" Y2="7.5" HorizontalAlignment="Center" Stretch="Fill" VerticalAlignment="Center" Stroke="White" StrokeThickness="1" StrokeStartLineCap="Round" StrokeEndLineCap="Round" RenderTransformOrigin="0.5,0.5">
<Line.RenderTransform>
<RotateTransform Angle="45" />
</Line.RenderTransform>
</Line>
</Grid>
还请注意,我们将每条直线的旋转原点设置为0.5和0.5。这有点令人困惑(为什么不是0,0),但是这个链接将帮助您理解
这些是添加到线条之外的形状,我不认为这些形状是在measure()/arrange()上的中心原点,但像往常一样,对于组合路径数据的解决方法+1,我知道你可能又是从头开始做的。克莱门斯·洛尔,我看到你做的更复杂的形状总是让人印象深刻。:)@好吧,我知道大写字母是什么,我只是不知道为什么它们在右边和底部,而不是在左边和顶部,对一条线的边界有影响。同样的事情实际上发生在没有指定结束大写字母的情况下,我几乎贴出了没有结束大写字母的问题来简化它。根据@ChrisW给出的链接,这应该默认为平面