我跟着this tutorial,但我不能將我學到的東西應用到我的項目中。如何創建自定義路由事件? WPF c#
我有一個LineGraph
對象(Dynamic Data Display),我想創建一個引發的事件時LineGraph的厚度等於0
我怎麼把它寫下面這個教程?
我跟着this tutorial,但我不能將我學到的東西應用到我的項目中。如何創建自定義路由事件? WPF c#
我有一個LineGraph
對象(Dynamic Data Display),我想創建一個引發的事件時LineGraph的厚度等於0
我怎麼把它寫下面這個教程?
就個人而言,我通常避免創建事件,寧願創建delegate
s。如果您有某些特殊原因需要特別事件,請忽略此答案。我更喜歡使用delegate
的原因是您不需要創建其他EventArgs
類,我也可以設置自己的參數類型。
首先,讓我們創建一個委託:
public delegate void TypeOfDelegate(YourDataType dataInstance);
現在getter和setter:
public TypeOfDelegate DelegateProperty { get; set; }
現在,讓我們創建一個將在匹配方法和出delegate
的參數:
public void CanBeCalledAnything(YourDataType dataInstance)
{
// do something with the dataInstance parameter
}
現在我們可以將此方法設置爲此中的一個(多個)處理程序:
DelegateProperty += CanBeCalledAnything;
最後,讓我們把我們的delegate
...這相當於引發事件:
if (DelegateProperty != null) DelegateProperty(dataInstanceOfTypeYourDataType);
注意事項null
重要的檢查。就是這樣了!如果您想要更多或更少的參數,只需將它們從delegate
聲明和處理方法中添加或刪除即可...很簡單。
這裏是我如何與一個RoutedEvent做到這一點:
創建從LineGraph
派生的類,比方說CustomLineGraph
:
public class CustomLineGraph : LineGraph {
}
這樣創建我們的路由事件:
public class CustomLineGraph : LineGraph {
public static readonly RoutedEvent ThicknessEvent = EventManager.RegisterRoutedEvent("Thickness", RoutingStrategy.Bubble, typeof(RoutedEventHandler, typeof(CustomLineGraph));
// .NET event wrapper
public event RoutedEventHandler Thickness
{
add { AddHandler(CustomLineGraph.ThicknessEvent, value); }
remove { RemoveHandler(CustomLineGraph.ThicknessEvent, value); }
}
}
現在我們覆蓋th e StrokeThickness
property,因此當該屬性的值爲0
時,我們可以提高我們的自定義路由事件。
public class CustomLineGraph : LineGraph {
public static readonly RoutedEvent ThicknessEvent = EventManager.RegisterRoutedEvent("Thickness", RoutingStrategy.Bubble, typeof(RoutedEventHandler, typeof(CustomLineGraph));
// .NET event wrapper
public event RoutedEventHandler Thickness
{
add { AddHandler(CustomLineGraph.ThicknessEvent, value); }
remove { RemoveHandler(CustomLineGraph.ThicknessEvent, value); }
}
public override double StrokeThickness {
get { return base.StrokeThickness; }
set
{
base.StrokeThickness = value;
if (value == 0)
RaiseEvent(new RoutedEventArgs(CustomLineGraph.ThicknessEvent, this));
}
}
}
我們完成了!
你有什麼確切的問題,爲什麼你不能應用教程? –
我不工作D3,但它似乎'LineGraph'對象沒有厚度屬性? –
你可以發佈一些代碼,以便我們可以看到問題是什麼? –