[英]c# wpf add click event to custom class
我四處搜尋並發現了一些東西,例如,這是一個給類的單擊事件,但是它似乎不適用於我想做的事情,或者我可能誤會了如何做。 我想要做的是將單擊事件添加到名為BaseShapes的類中,並且當用戶單擊BaseShapes中的Polygon時,它將執行click事件。 我為baseShapes提供的一些代碼如下
abstract class BaseShape
{
public Polygon shape { get; protected set; }
public event MouseButtonEventHandler MouseDown;
protected virtual void OnMouseDown(MouseButtonEventArgs e)
{
if (MouseDown != null)
{
MouseDown(this, e);
}
}
}
我只包括相關部分,還有更多的變量和方法。
在我的主窗口中,我添加了
s.MouseDown += test;
其中s是BaseShape的實例,當然還有另一個從baseShape繼承的類。 測試只是將測試消息打印給用戶。 我知道我丟失了一些東西,因為好像我沒有在測試用戶是否單擊了形狀,但是我不確定此后還需要做什么。
我想這樣做而不是僅僅進行s.shape.MouseDown + = test的原因; 是因為我有一種方法,當用戶單擊形狀時要調用該方法。 我在考慮從UIElements繼承,除了不知道在此之后下一步該怎么做= /。 謝謝。
好。 我再次嘗試,過了一段時間后,我相信我有辦法做到這一點。 我認為對我來說,自定義事件可能不是我應該采取的方式,因此我的BaseShape繼承了UIElements,我使用UIElelements中的OnRender通過將Polygon更改為Geometry並使用DrawingContext繪制參數來繪制形狀形狀。
然后,我可以將形狀本身繪制到我的窗口上,而不是像這樣做:
canvas.Children.Add(s.shape);
我現在能做的是:
canvas.Children.Add(s);
您可能想知道為什么? 現在,我不需要任何自定義事件,因為UIElements附帶了我需要的所有事件,主要是單擊事件。 我只需要添加訂閱者。 這也使我可以使用類中的屬性,而不必在單擊多邊形時從Polygon創建新的BaseShape。
我還需要包括這些線條以在BaseShape類的構造函數中繪制形狀
shape.Measure(new Size(length, length));
shape.Arrange(new Rect(0, 0, length, length));
如果不是,則不會繪制形狀。
如果您想知道我的最終代碼是什么樣的,基本上就是這樣,其中僅包括重要部分:
abstract class BaseShape : UIElement
{
public Polygon shape { get; protected set; }
public BaseShape()
{
shape.Measure(new Size(length, length));
shape.Arrange(new Rect(0, 0, length, length));
}
protected override void OnRender(DrawingContext drawingContext)
{
Geometry s = shape.RenderedGeometry;
drawingContext.DrawGeometry(Brushes.Red, new Pen(Brushes.Black, 1), s);
//base.OnRender(drawingContext);
}
}
public partial class MainWindow : Window
{
Shapes.Square sq;
public MainWindow()
{
InitializeComponent();
sq = new Shapes.Square(50, 0, 0, 0, 0, 2, Brushes.Red, Brushes.Black, Brushes.Red, Brushes.Purple);
canvas.Children.Add(sq);
sq.MouseDown += test;
}
public void test(Object sender, MouseButtonEventArgs e)
{
MessageBox.Show("Testing if this works :D");
}
}
}
希望我不會錯過任何更改的代碼。 我不需要類中的任何事件,而只需要繼承UIElements。 仍在嘗試,但希望這是答案,到目前為止,它似乎仍然有效:)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.