1
我對WPF很新,我試圖編寫基本上是TextBlock的自定義控件,但也有一個單擊事件。我試圖從各種來源拼湊這件事,但它不起作用。不調用自定義控件的OnMouseLeftButtonDown
在下面的代碼中,我期望OnMouseLeftButtonDown
在元素上執行鼠標單擊時被調用。如果發生這種情況,我想提高Click
事件。查看調試器,該函數從不被調用。
我誤解了這是應該如何工作,或做了一些其他錯誤發現它的方式進入我的代碼?
namespace EP3_gui.Controls
{
public class ClickableTextBlock : TextBlock
{
public ClickableTextBlock() : base()
{ }
public ClickableTextBlock(Inline inline)
: base(inline)
{ }
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
RoutedEventArgs args = new RoutedEventArgs(ClickEvent);
RaiseEvent(args);
}
public static readonly RoutedEvent ClickEvent = EventManager.RegisterRoutedEvent(
"Click",
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(ClickableTextBlock)
);
public event RoutedEventHandler Click
{
add { AddHandler(ClickEvent, value); }
remove { RemoveHandler(ClickEvent, value); }
}
}
}
這對我很好。在一個新的乾淨的WPF項目中嘗試你的代碼,你會看到它自己。在DEBUG模式下,我的'OnMouseLeftButtonDown'中的斷點已經到達,我的MainWindow代碼隱藏中的已註冊的ClickHandler也已到達。 – menty
謝謝,我有我的用戶控件不起作用。我會盡力狩獵現在...我應該刪除這個問題嗎? –
@AndreasWallner不需要刪除它,但也許你可以根據你找到的解決方案自己發佈一個簡短的答案? – McGarnagle