c# WPF routedevent に問題があります。このコードは正常に動作します:
MyLabel myLabel = new MyLabel();//MyOwn component
myLabel.Oma += new RoutedEventHandler(myLabel_Click);
GameArea.Children.Add(mylabel);//GameArea is UniformGrid
しかし、myLabel を ToggleButton のコンテンツに配置すると、routedeventhandler(myLabel_Click) は Oma イベントをキャッチしません (デバッグしました):
MyLabel myLabel = new MyLabel();//MyOwn component
myLabel.Oma += new RoutedEventHandler(myLabel_Click);
System.Windows.Controls.Primitives.ToggleButton box = new System.Windows.Controls.Primitives.ToggleButton();
box.Content = myLabel;
GameArea.Children.Add(box);//GameArea is UniformGrid
では、なぜ ToggleButton が routedevent をブロックするのでしょうか?
編集: コードは正常に動作しますが、myLabel を ToggleButton のコンテンツに入れると問題が発生します。
MyLabel の OmaEvent は次のようになります。
public static readonly RoutedEvent OmaEvent =
EventManager.RegisterRoutedEvent("Oma", RoutingStrategy.Bubble,
typeof(RoutedEventHandler), typeof(MyLabel));
public event RoutedEventHandler Oma
{
add { AddHandler(OmaEvent, value); }
remove { RemoveHandler(OmaEvent, value); }
}
protected override void OnMouseDown(MouseButtonEventArgs e)
{
base.OnMouseDown(e);
CaptureMouse();
}
protected override void OnMouseUp(MouseButtonEventArgs e)
{
base.OnMouseUp(e);
if (IsMouseCaptured)
{
ReleaseMouseCapture();
if (IsMouseOver)
RaiseEvent(new RoutedEventArgs(OmaEvent, this));
}
}
ToggleButton 内に配置すると、OmaEvent が発生することはありません。ToggleButton 内に配置しないと、機能します。