代码之家  ›  专栏  ›  技术社区  ›  serhio

在WPF中画线和圆

  •  1
  • serhio  · 技术社区  · 15 年前

    o-School----o-Church-------o-Police .

    在VS2010中,我认为WPF(据我所知,它使用矢量化图形)应该是开始绘制的好画布。

    它是可能的,复杂的,你有什么建议一个WPF初学者。

    编辑: 仪表板样式 对于线(点划线,点划线?

    4 回复  |  直到 15 年前
        1
  •  9
  •   ASanch    15 年前

    这里有一些东西可以帮助你开始。它有一个包含一些形状的画布和一个允许您控制缩放的滑块控件。您可以根据需要在画布中添加其他元素。

    <DockPanel>
        <Slider x:Name="slider" Minimum=".1" Maximum="10" Value="1" DockPanel.Dock="Top"/>
        <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
            <Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Center" VerticalAlignment="Center">
                <Canvas Width="300" Height="300">
                    <Canvas.LayoutTransform>
                        <ScaleTransform ScaleX="{Binding ElementName=slider, Path=Value}"
                                    ScaleY="{Binding ElementName=slider, Path=Value}"/>
                    </Canvas.LayoutTransform>
    
                    <Ellipse Canvas.Left="10" Canvas.Top="10" Width="20" Height="20"
                            Stroke="Black" StrokeThickness="1" Fill="Red"/>
                    <Line Canvas.Left="20" Canvas.Top="30" X1="0" X2="0" Y1="0" Y2="50" 
                        Stroke="Black" StrokeThickness="1"/>
                    <Ellipse Canvas.Left="10" Canvas.Top="80" Width="20" Height="20"
                            Stroke="Black" StrokeThickness="1" Fill="Yellow"/>
                </Canvas>
            </Border>
        </ScrollViewer>
    </DockPanel>
    

    编辑 :

    <Line Canvas.Left="100" Canvas.Top="100" Stroke="Black"
                              X1="0" X2="100" Y1="0" Y2="0"
                              StrokeThickness="3" StrokeDashArray="2,2"/>
    

    给出以下信息(即,由一系列长度为2的线段组成的直线,后跟长度为2的间隙):

    alt text

    将StrokeDashArray设置为

    StrokeDashArray="5,1,1,1"
    

    给你点划线图案。

    alt text

        2
  •  9
  •   Kris    15 年前

    您有几个使用Canvas和showing Zoom的例子,但是如果您只需要一行元素,您可以使用StackPanel并设置VerticalAlignment=“Center”,那么您不需要计算位置,只需要计算行的大小。

    alt text

        <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
        <StackPanel.Resources>
            <Style TargetType="Ellipse">
                <Setter Property="Width" Value="20" />
                <Setter Property="Height" Value="20" />
                <Setter Property="Stroke" Value="Orange" />
                <Setter Property="StrokeThickness" Value="3" />
            </Style>
            <Style TargetType="Line">
                <Setter Property="Stroke" Value="DodgerBlue" />
                <Setter Property="StrokeDashArray" Value="5,1,1,1,1,1" />
                <Setter Property="StrokeThickness" Value="2" />
            </Style>
            <Style TargetType="TextBlock">
                <Setter Property="Foreground" Value="White" />
                <Setter Property="FontWeight" Value="Bold" />
                <Setter Property="Padding" Value="4" />
            </Style>
            <Style TargetType="Border" x:Key="Label">
                <Setter Property="Background" Value="LimeGreen" />
                <Setter Property="CornerRadius" Value="10" />
            </Style>
        </StackPanel.Resources>
        <Ellipse />
        <Border VerticalAlignment="Center">
            <Line X2="50" />
        </Border>
        <Border Style="{StaticResource Label}">
            <TextBlock Text="Home" />
        </Border>
        <Border VerticalAlignment="Center">
            <Line X2="50" />
        </Border>            
        <Ellipse />
        <Border VerticalAlignment="Center">
            <Line X2="50" />
        </Border>
        <Border Style="{StaticResource Label}">
            <TextBlock Text="Church" />
        </Border>
        <Border VerticalAlignment="Center">
            <Line X2="50" />
        </Border>            
        <Ellipse />
        <Border VerticalAlignment="Center">
            <Line X2="20" />
        </Border>
        <Border Style="{StaticResource Label}">
            <TextBlock Text="Police" />
        </Border>
    </StackPanel>
    

        3
  •  1
  •   BlueCode    15 年前

    在WPF中很容易画出简单的形状。你可以在公园里找到它们 Shapes

    举个例子:

    <Canvas>
        <Ellipse Canvas.Top="0" Canvas.Left="0" Width="256" Height="256" />
        <Line Canvas.Top="0" Canvas.Left="256" X1="0" Y1="0" X2="128" Y2=128" >
    </Canvas>
    
        4
  •  1
  •   Nathan Kovner    15 年前

    这应该不复杂,我会把一个画布放在一个Viewbox中保持简单。增大画布的宽度和高度以缩小,减小它们以放大。

      <DockPanel>
        <Viewbox DockPanel.Dock="Top" Width="100" Height="100" >
          <Canvas Width="{Binding Path=Value, ElementName=TheZoomSlider}" Height="{Binding Path=Value, ElementName=TheZoomSlider}">
            <Ellipse Stroke="Black" Canvas.Top="40" Canvas.Left="20" Width="20" Height="20" />
            <Ellipse Stroke="Black" Canvas.Top="40" Canvas.Left="50" Width="20" Height="20" />
            <Ellipse Stroke="Black" Canvas.Top="40" Canvas.Left="80" Width="20" Height="20" />
          </Canvas>
        </Viewbox>
        <Slider Margin="0,400,0,0" HorizontalAlignment="Center" Orientation="Vertical" DockPanel.Dock="Bottom" Name="TheZoomSlider" Minimum="20" Maximum="800" Value="40" />
        </DockPanel>