在WPF中创建自定义“+”按钮

问题描述:

我一直试图在WPF中创建一个自定义加号按钮。我只想要+符号,但我没有任何运气让Path数据变量恰到好处。我已经看过了Path语法,但我仍然遇到了麻烦。在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" > 

任何人都可以告诉我我在这里有什么错吗?

感谢

+0

所示的加号按钮。如果“+”只是过大,使用ScaleTransform 。 –

尝试了这一点的路径 -

<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" /> 
+0

谢谢,这是我所需要的。你是怎么想出所有这些要点的? – Encryption

+0

@加密:我手工猜测,可能是试验和错误。或者他们以72宽度/高度开始,使有效的交叉线宽度为10,并从那里做数学,当它们完成时除以8。它追踪“+”形状的边缘。如果将这些坐标用手绘制在纸上,形状将变得更加明显。 –

可以使用Data属性这样

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

貌似这个

enter image description here

编辑
如果你想在管线盖到达的边缘你可以设置

StrokeEndLineCap="Square" 
StrokeStartLineCap="Square" 
+0

感谢这也为我工作。不知道为什么您的解决方案的数据点比RV1987少。我无法理解路径标记如何工作​​我猜。 – Encryption

+1

它们是相对点,所以无论它有多大,十字将总是伸展以填充“Button”。只需要四个值。 1.移至(x,y)(0.5,0)。 2.画线到(x,y)(0.5,1)。你有垂直线。然后将指针移动到(x,y)(0,0.5)并画一条线到(x,y)(1,0.5)。有你的水平线 –

+0

@Encryption:这使用笔画创建十字架本身,它只需要两条线段。 RV1987的答案描绘了十字的轮廓,它要求你指定十字(十二)边缘周围的所有线段。这个答案在两条线段之间拾取笔,而RV1987的答案没有拿起笔(它不需要,因为它们是端对端连接的)。 –

我知道这似乎是愚蠢的,但对于刚刚使用包含在一个大的字体大小+字符一个TextBlock?

+0

+1;这是一个很好的选项,它使按钮看起来像Firefox的“新标签”按钮。我也推荐粗体字体。 –

+0

这将工作,但我需要按钮有动画像我的其他按钮做。使用story_board来获取我想要的动画类型将不适用于您所描述的内容 – Encryption

我知道你想使用绘图路径,可能会想这应该是一个解决方案。该解决方案可能会有助于您未来的工作。但是这里有一个替代方案,它可能比您要求的解决方案更受欢迎。

我一直试图在WPF

创建自定义的加号按钮既然没有“加号按钮”控件,无论你做,当然会被定制。但是,您不必完全重新发明*。 Windows中已经使用了+图标。

除非您的应用程序具有完全自定义的用户界面,否则建议重新使用控件和图像来制作统一的用户体验。

要看看如何将这些现有的图标,看看这个答案:Default icons for Windows applications?

答案是指被与Visual Studio安装了Zip文件。从该zip文件中查看该图标:

VS2010ImageLibrary/_Common Elements/Actions/Add。PNG

"Add" icons

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

VS2010ImageLibrary /操作/ png_format/WinVista
VS2010ImageLibrary /对象/ png_format/WinVista

"Plus" icon"Add Category" icon"Add File" icon

若要使用您的按钮图像:

+1

这将工作,但我需要按钮有动画像我的其他按钮一样。使用story_board来获取我想要的动画类型将不适用于您所描述的 – Encryption

+0

@Encryption:够公平:) –

+0

@ MerlynMorgan-Graham是否有任何方法将它们从xaml中引用为静态类,如窗口暴露? –

对于任何人谁发现这个页面,以下路径:

     <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> 

让我在这个快照我的程序 Plus Button SnapShot