如何在WPF中创建具有属性的自定义形状?

时间:2017-04-09 01:16:27

标签: c# wpf xaml

如何在WPF中创建自定义形状?例如,我试图在一个cavas上绘制彼此连接的多个符号。我需要每个符号来改变颜色。我怎么创建让我们说一个可以改变颜色的自定义形状。假设我想将以下两种形状合二为一。我将如何封装它们

<Ellipse x:Name="theEllipse"
                 Height="89"
                 Width="82"
                 Fill="Black"
                 Canvas.Left="32"
                 Canvas.Top="75" />

<Ellipse x:Name="theEllipse"
                 Height="89"
                 Width="82"
                 Fill="Black"
                 Canvas.Left="32"
                 Canvas.Top="75" />

下面提供的解决方案可以使用省略号,但是, 它不适用于以下数字:

        <Line X1="10"
              Y1="50"
              X2="50"
              Y2="50"
              Stroke="Black"
              StrokeThickness="2" />
        <Line X1="15"
              Y1="55"
              X2="45"
              Y2="55"
              Stroke="Black"
              StrokeThickness="2" />

        <Line X1="20"
              Y1="60"
              X2="40"
              Y2="60"
              Stroke="Black"
              StrokeThickness="2" />

1 个答案:

答案 0 :(得分:1)

你可以在Blend中完成。

  1. 对象和时间轴窗口
  2. 中选择两个椭圆/形状
  3. 右键单击选择
  4. 转到路径 - &gt; 制作复合路径
  5. enter image description here

    更新2017-04-10

    如果您希望此操作适用于所有形状和线条,则必须确保您的元素位于Canvas内,而不是GridStackPanel。元素的父容器很重要。

    因此,在3行的情况下,将它们包裹在Canvas内并再次运行 Make Compound Path 操作。

    <Canvas>
        <Line X1="10"
                Y1="50"
                X2="50"
                Y2="50"
                Stroke="Black"
                StrokeThickness="2" />
        <Line X1="15"
                Y1="55"
                X2="45"
                Y2="55"
                Stroke="Black"
                StrokeThickness="2" />
    
        <Line X1="20"
                Y1="60"
                X2="40"
                Y2="60"
                Stroke="Black"
                StrokeThickness="2" />
    </Canvas>
    

    以下是它的样子:

    <Canvas>
        <Path Data="M1,1 L41,1 M6.00001,6 L36,6 M11,11 L31,11"
                Height="12"
                Canvas.Left="9"
                Stretch="Fill"
                Stroke="Black"
                StrokeThickness="2"
                Canvas.Top="49"
                UseLayoutRounding="False"
                Width="42" />
    </Canvas>
    
相关问题