WPF学習中「キーボード入力」

コンピュータ

キーボード入力のサンプル

プロジェクトの作成

dotnet new wpf -n KeyPress
cd KeyPress
dotnet add package Microsoft.Xaml.Behaviors.Wpf
dotnet add package ReactiveProperty.WPF
code .

ソースコード

ファイル名:MainWindow.xaml

<Window x:Class="KeyPress.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:i="clr-namespace:Microsoft.Xaml.Behaviors;assembly=Microsoft.Xaml.Behaviors"
        xmlns:interactivity="clr-namespace:Reactive.Bindings.Interactivity;assembly=ReactiveProperty.WPF"
        xmlns:local="clr-namespace:KeyPress"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <local:MainWindowViewModel />
    </Window.DataContext>
    <Window.InputBindings>
        <KeyBinding
            Gesture="CTRL+A"
            Command="{Binding AllSelectCommand}"/>
    </Window.InputBindings>
    <Grid>

    </Grid>
</Window>

ファイル名:MainWindowViewModel.cs

using System;
using System.Windows;
using System.ComponentModel;
using System.Reactive.Disposables;
using Reactive.Bindings;
using Reactive.Bindings.Extensions;

namespace KeyPress
{
    public class MainWindowViewModel : INotifyPropertyChanged, IDisposable
    {
        public ReactiveCommand AllSelectCommand { get; }
        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string name)
        {
            if (PropertyChanged == null) return;
            PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
        private CompositeDisposable Disposable { get; } = new ();

        public MainWindowViewModel()
        {
            PropertyChanged += (o, e) => {};

            AllSelectCommand = new ReactiveCommand()
                .WithSubscribe (
                    () => {
                        MessageBox.Show("Ctrl+Aが押された");
                    })
                .AddTo(Disposable);
        }
        public void Dispose() => Disposable.Dispose();
    }
}

他のソースファイルに変更なし。

実行

dotnet run

警告

E:\csharp\wpf\KeyPress\MainWindowViewModel.cs(13,50): warning CS8612: 'event PropertyChangedEventHandler MainWindowViewModel.PropertyChanged' の型における参照型の Null 許容性が、暗黙的に実装されるメンバー 'event PropertyChangedEventHandler? INotifyPropertyChanged.PropertyChanged' と一致しません。 [E:\csharp\wpf\KeyPress\KeyPress
_hqopt1c1_wpftmp.csproj]
E:\csharp\wpf\KeyPress\MainWindowViewModel.cs(13,50): warning CS8612: 'event PropertyChangedEventHandler MainWindowViewModel.PropertyChanged' の型における参照型の Null 許容性が、暗黙的に実装されるメンバー 'event PropertyChangedEventHandler? INotifyPropertyChanged.PropertyChanged' と一致しません。 [E:\csharp\wpf\KeyPress\KeyPress
.csproj]
    2 個の警告

コメント