zoukankan      html  css  js  c++  java
  • WPF学习04:2D绘图 使用Shape绘基本图形

        我们将使用Shape进行基本图形绘制。

    例子

        一个可移动的矩形方框:

       image image

        XAML代码:

    <Window x:Class="Shape.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Background="#019aff"
            Title="Shape" Height="350" Width="525" KeyUp="Window_KeyUp" Loaded="Window_Loaded"
            >
        <Canvas Name="MainCanvas">
            <Rectangle Stroke="White" Width="80.6" Canvas.Top="50" Canvas.Left="50" Height="80.6" Name="DisplayRectangle"/>
        </Canvas>
    </Window>

        后台代码:

    private void Window_KeyUp(object sender, KeyEventArgs e)
    {
        switch (e.Key)
        {
            case Key.Up:
                RectangleCanvasTop += 10;
                break;
            case Key.Down:
                RectangleCanvasTop -= 10;
                break;
            case Key.Right:
                RectangleCanvasLeft += 10;
                break;
            case Key.Left:
                RectangleCanvasLeft -= 10;
                break;
            default:
                break;
        }
        Canvas.SetLeft(DisplayRectangle, RectangleCanvasLeft);
        Canvas.SetTop(DisplayRectangle, RectangleCanvasTop);
    }


     

    Shape简介

       以下是各类Shape的继承结构:

        image

        各类Shape均继承于Shape,而Shape与其它的WPF控件一样,也继承于FrameworkElement,即其它控件支持的功能(各种事件,属性),Shape也是支持的,这是使用Shape绘图的优点。

        例子中,Shape是放在Canvas中的,Shape亦可放在其它的Layout控件中。由于Canvas提供了绝对定位的支持,故而常常与Shape搭配出现。


     

    Ellipse:

       image

        XAML实现:

    <Canvas Name="MainCanvas">
        <Ellipse Width="100" Height="100" Fill="White"></Ellipse>
        <Ellipse Canvas.Left="100" Width="50" Height="100" Fill="White"></Ellipse>
    </Canvas>
     

        后台代码实现:

    var circle = new Ellipse()
    {
        Width = 100,
        Height = 100,
        Fill = new SolidColorBrush(Colors.White)
    };
    var ellipse = new Ellipse()
    {
        Width = 50,
        Height = 100,
        Fill = new SolidColorBrush(Colors.White)
    };
    Canvas.SetLeft(ellipse, 100);
    MainCanvas.Children.Add(circle);
    MainCanvas.Children.Add(ellipse);
     

    Line

       image

       XAML实现:

    <Line X1="50" X2="100" Y1="50" Y2="100" Stroke="White"></Line>
    <Line X1="100" X2="150" Y1="100" Y2="100" Stroke="White"></Line>

        后台代码实现:

    MainCanvas.Children.Add(new Line(){
        X1 = 0,
        X2 = 100,
        Y1 = 100,
        Y2 = 0,
        Stroke = new SolidColorBrush(Colors.White)
    });
     


    Polygon

        image

        XAML实现:

    <Polygon Points="0,0 50,50 50,100" Stroke="Black"></Polygon>
    <Polygon Canvas.Left="100" Points="0,0 50,50 50,100 100,50" Fill="White" Stroke="Black"></Polygon>

        后台代码:

    var polygon1PointsCollection = new PointCollection();
    polygon1PointsCollection.Add(new Point() { X = 0, Y = 0 });
    polygon1PointsCollection.Add(new Point() { X = 50, Y = 50 });
    polygon1PointsCollection.Add(new Point() { X = 50, Y = 100 });
    
    var polygon1 = new Polygon()
    {
        Stroke = new SolidColorBrush(Colors.Black),
        Points = polygon1PointsCollection
    };
    MainCanvas.Children.Add(polygon1);
    
    var polygon2PointsCollection = new PointCollection();
    polygon2PointsCollection.Add(new Point() { X = 0, Y = 0 });
    polygon2PointsCollection.Add(new Point() { X = 50, Y = 50 });
    polygon2PointsCollection.Add(new Point() { X = 50, Y = 100 });
    polygon2PointsCollection.Add(new Point() { X = 100, Y = 50 });
    var polygon2 = new Polygon()
    {
        Stroke = new SolidColorBrush(Colors.Black),
        Points = polygon2PointsCollection,
        Fill = new SolidColorBrush(Colors.White)
    };
    Canvas.SetLeft(polygon2, 100);
    MainCanvas.Children.Add(polygon2);

    虚线边框:

    image

        XAML实现:

    <Polygon Points="0,0 50,50 50,100" Stroke="Black" StrokeDashArray="2 2"></Polygon>
    <Polygon Points="0,0 50,50 50,100" Stroke="Black" StrokeDashArray="4 4" Canvas.Left="100"></Polygon>
  • 相关阅读:
    父级和 子集 controller 之间的通讯
    ui-router(三)controller与template
    ui-router详解(二)ngRoute工具区别
    关于MySql全文索引
    Yii提供的Htmler助手checkboxList可自定义Checkbox输出格式
    添加和删除索引以及如何给中间表添加两个主键
    设置数据库及表的默认字符集
    保存数据的时候报类型错误的原因和解决方案
    金融经济
    YII获取刚插入数据的id主键
  • 原文地址:https://www.cnblogs.com/E-WALKER/p/4381410.html
Copyright © 2011-2022 走看看