簡體   English   中英

將Rect添加到畫布

[英]Adding Rect to canvas

我正在嘗試將Rect對象添加到畫布。 使用Rectangle對象,很容易將其添加到畫布中。 對於Rect來說似乎並不那么簡單。 在提供的鏈接上,我找到了以下代碼來實現所需的代碼:

Path myPath1 = new Path();
myPath1.Stroke = Brushes.Black;
myPath1.StrokeThickness = 1;
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = Color.FromArgb(255, 204, 204, 255);
myPath1.Fill = mySolidColorBrush;

Rect myRect1 = new Rect();
myRect1.X = 10;
myRect1.Y = 100;
myRect1.Width = 150;
myRect1.Height = 100;
RectangleGeometry myRectangleGeometry1 = new RectangleGeometry();
myRectangleGeometry1.Rect = myRect1;

GeometryGroup myGeometryGroup1 = new GeometryGroup();
myGeometryGroup1.Children.Add(myRectangleGeometry1);

myPath1.Data = myGeometryGroup1;

// Add path shape to the UI.
Canvas myCanvas = new Canvas();
myCanvas.Children.Add(myPath1);
this.Content = myCanvas;

我不敢相信我必須經歷所有這些只是添加一個簡單的Rect對象! 當我想更改Rect(例如通過拖動)時,我必須再次經歷一下嗎? 必須有一個更簡單的方法。 我該怎么辦?

編輯:我不使用System.Windows.Shapes對象,因為我無法計算是否存在某個Point(OnClick)。 System.Drawing.Rectangle可以做到這一點,但是它要求的是Rectangle而不是Point,即使文檔中另有說明...也不能在該Rectangle上設置OpacityStroke屬性。

為了找出是否單擊了Rectangle ,您可以將一個MouseDownMouseLeftButtonDown處理函數添加到Rectangle對象本身:

<Canvas>
    <Rectangle Canvas.Left="100" Canvas.Top="100" Width="100" Height="100"
               Fill="AliceBlue" MouseLeftButtonDown="Rectangle_MouseLeftButtonDown"/>
</Canvas>

private void Rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    var rect = sender as Rectangle;
    // do something
}

或在Canvas上調用InputHitTest並將返回的對象轉換為Rectangle

<Canvas MouseLeftButtonDown="Canvas_MouseLeftButtonDown">
    <Rectangle Canvas.Left="100" Canvas.Top="100" Width="100" Height="100"
               Fill="Transparent" Stroke="Black" StrokeThickness="2"/>
</Canvas>

private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    var parent = sender as UIElement;
    var rect = parent.InputHitTest(e.GetPosition(parent)) as Rectangle;
    if (rect != null)
    {
        // do something
    }
}

當然,您可以在System.Windows.Shapes.Rectangle上設置諸如OpacityStroke類的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM