しゃげログ

プログラミング、ときどき旅行

【C#, WPF】アナログ時計を作る -その3-

こんにちは、しゃげまんじゅです。

前回で時計機能は完成しましたが、タイトルバーの無いスタイルを使うとウィンドウの移動・終了などの機能がデフォルトで付いておらず不便なので追加していきます。


ウィンドウサイズの設定

前回ウィンドウのHeight・Widthを削除したのでウィンドウサイズが画像にフィットしていません。
以下の一行を追加することによってウィンドウサイズが自動的に画像にフィットするようにします。

//コンテンツに合わせて自動的にサイズを設定
this.SizeToContent = SizeToContent.WidthAndHeight;

 

ウィンドウの移動

MainWindow()内に以下の一行を追加します。
これでドラッグによりウィンドウを動かせるようになりました。

//ドラッグで動かせるようにする
MouseLeftButtonDown += (o, e) => DragMove();

 

ウィンドウの終了

右クリックでメニューが出るようにMainWindow.xamlに記述します。

<Window.ContextMenu>
    <ContextMenu>
        <MenuItem Header="終了" Click="Button_Click_exit"/>
    </ContextMenu>
</Window.ContextMenu>

 

追加したメニューをクリックした際の処理をMainWindow.xaml.csに記述します。
これでメニューから終了操作ができるようになりました。

private void Button_Click_exit(object s, RoutedEventArgs e)
{
    Application.Current.Shutdown();
}

 

ウィンドウを最前面に固定

MainWindow.xaml内に先ほど追加した<ContextMenu>に以下の一行を追加します。

<MenuItem Header="最前面に固定" IsChecked="False" IsCheckable="True" Checked="fixedFront_Checked" Unchecked="fixedFront_Unchecked"/>

 

MainWindow.xaml.csにチェック時・未チェック時の処理を記述します。
これでチェック時に常に最前面に表示されるようになりました。

//最前面に固定

//チェック時
private void fixedFront_Checked(object s, RoutedEventArgs e)
{
    this.Topmost = true;
}

//未チェック時
private void fixedFront_Unchecked(object s, RoutedEventArgs e)
{
    this.Topmost = false;
}

 


次回は画像のサイズを変更できるように設定します。

次回更新日:2021/05/14 19:30