“创建自定义”+&引用;WPF中的按钮

“创建自定义”+&引用;WPF中的按钮,wpf,Wpf,我一直在尝试在WPF中创建一个自定义的加号按钮。我只想要+符号,但我没有任何运气得到正确的路径数据变量。我已经查看了路径语法,但仍然有问题 这是我到目前为止所拥有的,但它太大了。我需要一个更小、比例更高的按钮: <Path Stretch="Fill" Opacity="1" x:Name="path" StrokeThickness="10" RenderTransformOrigin="0.5,0.5" M

我一直在尝试在WPF中创建一个自定义的加号按钮。我只想要+符号,但我没有任何运气得到正确的路径数据变量。我已经查看了路径语法,但仍然有问题

这是我到目前为止所拥有的,但它太大了。我需要一个更小、比例更高的按钮:

<Path
        Stretch="Fill"
        Opacity="1"
        x:Name="path"
        StrokeThickness="10"
        RenderTransformOrigin="0.5,0.5" Margin="39,56.75,39,65.25" Data="M0,5L10,5 M5,5L5,1z" >

有谁能告诉我这里出了什么问题吗


谢谢

您可以像这样使用
数据
属性

<Button>
    <Path Data="M0.5,0 L0.5,1 M0,0.5 L1,0.5"
          StrokeThickness="4"
          Stretch="Fill"
          Stroke="Red" />
</Button>

我知道这看起来很傻,但是如果只使用大字体中包含+字符的文本块呢-

<Path Stretch="Fill"
      Fill="Black"
      Stroke="{x:Null}"
      StrokeThickness="0.5"
      Data="M3.875,0 L5.125,0 5.125,3.875 9,3.875 9,5.125 5.125,5.125 5.125,9 3.875,9 3.875,5.125 0,5.125 0,3.875 3.875,3.875 3.875,0 z" />

我知道您正在尝试使用绘图路径,并且可能希望获得解决方案。这个解决方案可能会对你将来的工作有所帮助。但是,对于这个特定的按钮,这里有一个替代方案,它可能比您所要求的解决方案更可取

我一直在尝试在WPF中创建一个自定义的加号按钮

由于没有“加号按钮”控件,所以您所做的任何操作都将是自定义的。然而,你不必完全重新发明轮子。Windows中已经使用了
+
图标

除非您的应用程序将具有完全自定义的UI,否则建议重用控件和图像以获得统一的用户体验

要查看如何获取这些现有图标,请检查以下答案:

答案是指使用VisualStudio安装的Zip文件。从该zip文件中,查看此图标:

VS2010ImageLibrary/_通用元素/Actions/Add.png

下面还有其他“添加”类型的图标:

VS2010ImageLibrary/Actions/png_格式/WinVista
VS2010ImageLibrary/Objects/png_格式/WinVista

要使用按钮上的图像,请执行以下操作:

  • 提取图像
  • 以任何必要的方式编辑图像(在VS或绘画程序中)
  • 将图像作为嵌入资源添加到项目中
  • 看看这个问题:

对于发现此页面的任何其他人,请使用以下路径:

                     <Path x:Name="ButtonPath"
                              Margin="1"
                              Stroke="Gray"
                              StrokeThickness="1"
                              StrokeStartLineCap="Square"
                              StrokeEndLineCap="Square"
                              Stretch="Uniform"
                              VerticalAlignment="Center"
                              HorizontalAlignment="Center"

                             >

                            <Path.Data>
                            <PathGeometry>
                                <PathGeometry.Figures>
                                    <PathFigure StartPoint="0,100">
                                        <LineSegment Point="0,-100"/>
                                    </PathFigure>
                                    <PathFigure StartPoint="100,0">
                                        <LineSegment Point="-100,0"/>
                                    </PathFigure>
                                </PathGeometry.Figures>
                            </PathGeometry>
                        </Path.Data>
                   </Path>

为我提供程序快照中显示的加号按钮

如果“+”太大,请使用ScaleTransform.+1;这是一个很好的选项,可以让按钮看起来像Firefox的“新建选项卡”按钮。我还建议将字体加粗。这会起作用,但我需要按钮像其他按钮一样具有动画效果。使用故事板获得我想要的动画类型与您描述的效果不太好,但我需要按钮像其他按钮一样具有动画。使用故事板来获得我想要的动画类型,这与您的想法不太相符described@MerlynMorgan-Graham有没有办法像windows公开的静态类一样从xaml引用它们?@eranotzap:我不这么认为。-您仍然需要提取它们,然后像导入其他图像一样导入它们。谢谢,这是我需要的。你是怎么得出这些结论的?@Encryption:我只是手工猜测,可能是反复试验。或者他们从72宽/高开始,将有效交叉线宽度设为10,然后从那里开始计算,计算完成后除以8。它跟踪
+
形状的边缘。如果你用手在纸上画出这些坐标,形状会变得更明显。谢谢,这对我也很有用。但不确定为什么您的解决方案的数据点比RV1987少。我想我很难理解路径标记是如何工作的。它们是相对点,因此无论大小,十字架都会拉伸以填充
按钮。只需要四个值。1.移动到(x,y)(0.5,0)。2.画线到(x,y)(0.5,1)。这是垂直线。然后将指针移动到(x,y)(0,0.5)并在(x,y)(1,0.5)处画一条线。这是你的横杆line@Encryption:这将使用笔划创建十字本身,它只需要两条线段。RV1987的答案追踪了十字架的轮廓,这要求您指定围绕十字架边缘的所有线段(十二条)。此答案在两条线段之间拾取笔,而RV1987的答案不拾取笔(不必拾取笔,因为它们是端到端连接的)。
                     <Path x:Name="ButtonPath"
                              Margin="1"
                              Stroke="Gray"
                              StrokeThickness="1"
                              StrokeStartLineCap="Square"
                              StrokeEndLineCap="Square"
                              Stretch="Uniform"
                              VerticalAlignment="Center"
                              HorizontalAlignment="Center"

                             >

                            <Path.Data>
                            <PathGeometry>
                                <PathGeometry.Figures>
                                    <PathFigure StartPoint="0,100">
                                        <LineSegment Point="0,-100"/>
                                    </PathFigure>
                                    <PathFigure StartPoint="100,0">
                                        <LineSegment Point="-100,0"/>
                                    </PathFigure>
                                </PathGeometry.Figures>
                            </PathGeometry>
                        </Path.Data>
                   </Path>