前提・実現したいこと
WPFアプリでXAML Islandsによってコントロールをホストして使用しています。
その時、コントロールのイベントをラップしようとしたところ、RoutedEventHandler で宣言されたイベントは
ラップすることができませんでした。
RoutedEventHandler で宣言されたイベントをラップするには、どの様にするのでしょうか?
下記コードは、
https://github.com/windows-toolkit/Microsoft.Toolkit.Win32/blob/master/Microsoft.Toolkit.Wpf.UI.Controls/InkToolbar/InkToolbar.cs
を参考に、イベントをラップしています。すると以下のようなエラーメッセージが発生します。
CS0123 デリゲート 'RoutedEventHandler' に一致する 'OnToggled' のオーバーロードはありません
参考にしたページのイベントハンドラは、TypedEventHandler で宣言されている一方、今回のToggled は RoutedEventHandler で宣言されていることは理解しましたが、RoutedEventHandler で宣言しているイベントをラップするには、どの様にするのでしょうか?
該当のソースコード
C#
1using System; 2using System.Windows; 3using UWP = Windows.UI.Xaml.Controls; 4 5namespace WrapControls 6{ 7 /// <summary> 8 /// Wpf-enabled wrapper for <see cref="windows.UI.Xaml.Controls.ToggleSwitch"/> 9 /// </summary> 10 public class UwpToggleSwitch : Microsoft.Toolkit.Wpf.UI.XamlHost.WindowsXamlHostBase 11 { 12 internal UWP.ToggleSwitch UwpControl => ChildInternal as UWP.ToggleSwitch; 13 14 protected override void OnInitialized(EventArgs e) 15 { 16 // Bind dependency properties across controls 17 // properties of FrameworkElement 18 Bind(nameof(Style), StyleProperty, UWP.ToggleSwitch.StyleProperty); 19 Bind(nameof(MaxHeight), MaxHeightProperty, UWP.ToggleSwitch.MaxHeightProperty); 20 Bind(nameof(FlowDirection), FlowDirectionProperty, UWP.ToggleSwitch.FlowDirectionProperty); 21 Bind(nameof(Margin), MarginProperty, UWP.ToggleSwitch.MarginProperty); 22 Bind(nameof(HorizontalAlignment), HorizontalAlignmentProperty, UWP.ToggleSwitch.HorizontalAlignmentProperty); 23 Bind(nameof(VerticalAlignment), VerticalAlignmentProperty, UWP.ToggleSwitch.VerticalAlignmentProperty); 24 Bind(nameof(MinHeight), MinHeightProperty, UWP.ToggleSwitch.MinHeightProperty); 25 Bind(nameof(Height), HeightProperty, UWP.ToggleSwitch.HeightProperty); 26 Bind(nameof(MinWidth), MinWidthProperty, UWP.ToggleSwitch.MinWidthProperty); 27 Bind(nameof(MaxWidth), MaxWidthProperty, UWP.ToggleSwitch.MaxWidthProperty); 28 Bind(nameof(UseLayoutRounding), UseLayoutRoundingProperty, UWP.ToggleSwitch.UseLayoutRoundingProperty); 29 Bind(nameof(Name), NameProperty, UWP.ToggleSwitch.NameProperty); 30 Bind(nameof(Tag), TagProperty, UWP.ToggleSwitch.TagProperty); 31 Bind(nameof(DataContext), DataContextProperty, UWP.ToggleSwitch.DataContextProperty); 32 Bind(nameof(Width), WidthProperty, UWP.ToggleSwitch.WidthProperty); 33 34 //ここでエラー 35 UwpControl.Toggled += OnToggled; 36 37 base.OnInitialized(e); 38 } 39 40 public event EventHandler<object> Toggled = (sender, args) => { }; 41 42 private void OnToggled(UWP.ToggleSwitch sender, object args) 43 { 44 Toggled?.Invoke(this, args); 45 } 46 } 47}
参考としたサイト
WPFにおけるコントロールのホストに関する参考ページ(Microsoft Docs)
XAML Islands を使用して WPF アプリで標準 WinRT XAML コントロールをホストする
ホストしたコントロールのラッピングに関する参考ページ
WPF on .NET Core 3.0 で XAML Islands してみよう
イベントハンドラのタッピング参考ページ
https://github.com/windows-toolkit/Microsoft.Toolkit.Win32/blob/master/Microsoft.Toolkit.Wpf.UI.Controls/InkToolbar/InkToolbar.cs
回答1件
あなたの回答
tips
プレビュー