国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

WPFCanvas畫區域

2019-11-14 15:51:55
字體:
來源:轉載
供稿:網友

有時候需要實現類似于QQ截圖那樣的選擇區域功能,這里的區域可以是一條線,圓,矩形等等

實現原理就是一個Canvas做蒙板,然后canvas的三個事件,MouseLeftButtonDown,MouseMove,MouseLeftButtonUp。非常easy!

首先,你要有個canvas

<Canvas Name="videocanvas" Height="288" Width="352" Background="Transparent" MouseMove="image_MouseMove" MouseLeftButtonDown="Mask_MouseLeftButtonDown" MouseLeftButtonUp="Mask_MouseLeftButtonUp"/>

然后實現他的事件,在之前我們先決定一下到底是什么形狀的區域。

1 public static Shape CreateShape()2 {3     //矩形區域4     return new System.Windows.Shapes.Rectangle() { Fill = null, Stroke = System.Windows.Media.Brushes.Red, StrokeThickness = 1 };5     //圓形區域6     //return new System.Windows.Shapes.Ellipse() { Fill = null, Stroke = System.Windows.Media.Brushes.Red, StrokeThickness = 1 };7 8 }

然后實現三個事件

bool drawFlag = false;Shape insertShape;System.Windows.Point startPosition;PRivate void Mask_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){    insertShape = CreateShape();    if (insertShape != null)    {        drawFlag = true;        Canvas board = sender as Canvas;        board.Children.Clear();        startPosition = e.GetPosition(board);        insertShape.Opacity = 1;        Canvas.SetLeft(insertShape, e.GetPosition(board).X);        Canvas.SetTop(insertShape, e.GetPosition(board).Y);        board.Children.Add(insertShape);    }}private void image_MouseMove(object sender, MouseEventArgs e){    Canvas board = sender as Canvas;    if (drawFlag && insertShape != null)    {        if (e.GetPosition(board).X > startPosition.X)        {            insertShape.Width = e.GetPosition(board).X - startPosition.X;                    }        else        {            insertShape.Width = startPosition.X - e.GetPosition(board).X;            Canvas.SetLeft(insertShape, e.GetPosition(board).X);        }        if (e.GetPosition(board).Y > startPosition.Y)        {            insertShape.Height = e.GetPosition(board).Y - startPosition.Y;        }        else        {            insertShape.Height = startPosition.Y - e.GetPosition(board).Y;            Canvas.SetTop(insertShape, e.GetPosition(board).Y);        }    }}private void Mask_MouseLeftButtonUp(object sender, MouseButtonEventArgs e){    drawFlag = false;    if (insertShape != null)    {        insertShape.Opacity = 1;        System.Windows.Point p = e.GetPosition(sender as Canvas);        Canvas.SetLeft(insertShape, e.GetPosition(board).X);        Canvas.SetTop(insertShape, e.GetPosition(board).Y);    }}

本來還想做個多邊形的例子,水平有限,沒達到我想要的效果。研究研究再發。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高雄县| 甘孜县| 墨玉县| 丁青县| 景洪市| 平罗县| 涞水县| 宜春市| 成都市| 大埔区| 巴青县| 公主岭市| 资源县| 张家川| 临江市| 靖边县| 自治县| 四会市| 昆山市| 来凤县| 乌海市| 盐津县| 乐平市| 桑日县| 长阳| 尼勒克县| 通许县| 丹江口市| 通渭县| 阜康市| 体育| 邢台市| 鹤庆县| 江口县| 冕宁县| 宿州市| 石门县| 雅江县| 石阡县| 湖北省| 鹰潭市|