2021-09-18に更新

WPFでタイトルバー消そうぜ(^~^)

ぺぷー(^~^) ぴゅひゅー(^q^) 公開下書き

前の話し

📖 WPFって何だぜ(^~^)?

気の早い人向け

📖 wpf-window-style-practice - Git hub に上げたもの

今回の話し

📖 WPFで画面のタイトルバーを表示しない。

ramen-tabero-futsu2.png
「 タイトルバー消そうぜ?」

kifuwarabe-futsu.png
「 ウィンドウの形を消して、 スクリーンに ぽっかり浮かぶ ウィジェットみたいな ルックスもできるはずだぜ」

ohkina-hiyoko-futsu2.png
「 音楽サイトによくおいてそうなやつよね。絶対 四角なんて嫌だ、みたいなアプリケーション」

20210917wpf85.png

ramen-tabero-futsu2.png
「 👆 初期状態で どんなウィンドウが出るかというと、 Windows 7 や Windows 10 では違うだろうし、
これからも Windows がアップデートするたびに違うと思うんだが……」

20210917wpf86.png

ramen-tabero-futsu2.png
「 👆 タイトルバーや、リサイズのための 目には見えない端っこの当たり判定、 ウィンドウの影などが付いているぜ」

kifuwarabe-futsu.png
「 全部 取り外してくれだぜ」

20210917wpf87a1.png

ramen-tabero-futsu2.png
「 👆 WindowStyle="None" を付けろだぜ」

20210917wpf88.png

ramen-tabero-futsu2.png
「 👆 タイトルバーが 外れたぜ。 閉じるボタン をクリックできなくなったから、
お前のPCの知識で がんばって 閉じろだぜ」

kifuwarabe-futsu.png
「 なんか ウィンドウの影は残ってるな」

20210917wpf89.png

ramen-tabero-futsu2.png
「 👆 目には見えないが ウィンドウの端を持って サイズを変える、という機能は生きてるぜ」

kifuwarabe-futsu.png
「 外してくれだぜ」

20210917wpf90a1.png

ramen-tabero-futsu2.png
「 👆 ResizeMode="NoResize" を付けると、 ウィンドウの端っこをつまんでリサイズすることはできなくなるし、
なんでか ウィンドウの影まで消えるぜ」

20210917wpf91.png

ohkina-hiyoko-futsu2.png
「 👆 なんで 影まで消えるのよ」

20210917wpf91a1.png

kifuwarabe-futsu.png
「 👆 これは消せないのか?」

ramen-tabero-futsu2.png
「 わたしには それが何だか 分からない……、名前も分からないぜ。 超 邪魔」

kifuwarabe-futsu.png
「 背景の白い四角も消してくれだぜ」

20210917wpf92a1.png

        AllowsTransparency="True"
        Background="#00000000"

ramen-tabero-futsu2.png
「 👆 上記の2つを付けろだぜ。
透明になると 何も見えなくなるから、緑色の楕円を塗っておくぜ」

20210917wpf93.png

ramen-tabero-futsu2.png
「 👆 はい。 超 邪魔」

閉じるボタンやっぱり欲しい

ohkina-hiyoko-futsu2.png
「 閉じるボタン やっぱり 欲しくない?」

ramen-tabero-futsu2.png
「 図形を 丁寧に設計するの 大変なんだよな」

📖 WPF色一覧表示してHSVで並べ替えするアプリできた

ramen-tabero-futsu2.png
「 👆 色の一覧を借りよう」

20210917wpf94.png

ramen-tabero-futsu2.png
「 👆 じゃあ ふつうにボタンを置こうぜ?
そして ボタンをダブルクリックしろだぜ」

20210917wpf95a1.png

namespace WpfWindowStylePractice
{
    using System.Windows;

    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            // ウィンドウを閉じます
            this.Close();
        }
    }
}

ramen-tabero-futsu2.png
「 👆 this.Close() って書いとけば ウィンドウは閉じれるな」

20210917wpf96a1.png

ramen-tabero-futsu2.png
「 👆 メソッド名に マウスカーソルを合わせて右クリック、 名前の変更 を選べだぜ」

20210917wpf97a1.png

ramen-tabero-futsu2.png
「 👆 CloseButton_Click とかに名前を変えとけば 分かりやすいな。
ボタンの名前が 名詞ではなくて 動詞から始まると なんか気になるが……」

20210917wpf98a1.png

ramen-tabero-futsu2.png
「 👆 名前の変更機能を使うと Button_Click と紐づいていたところも 名前が変わってるんで」

20210917wpf99.png

kifuwarabe-futsu.png
「 こんな複雑な形だと ウィンドウの枠線を引くのも 手間だな」

ramen-tabero-futsu2.png
「 やりたくないぜ 忙しいんで」

ohkina-hiyoko-futsu2.png
「 輪郭線にマウスカーソルを合わせて 引っ張れば大きくなる、ということに 私たちは慣れてるんじゃない?」

ramen-tabero-futsu2.png
「 図形によっては 外側ってどっち? ってなるんで 一般化は やりたくないぜ」

ohkina-hiyoko-futsu2.png
「 中心から遠ざけるか、近づけるか だけ見ればいいのよ」

ramen-tabero-futsu2.png
「 あれっ! ナナメに置いたボタンが 押せね!」

kifuwarabe-futsu.png
「 Tab キーで ボタンへ移動して Enter キーで押せるぜ」

ramen-tabero-futsu2.png
「 クリックができね! ダメか……」

ramen-tabero-futsu2.png
「 タイトルの文字の当たり判定が 見た目よりでかくて、ボタンを覆ってしまってるんだぜ!」

ohkina-hiyoko-futsu2.png
「 クリック イベントを拾わずに うしろのオブジェクトに譲れないの?」

20210918wpf100.png

        <!-- タイトル -->
        <Label Grid.Row="1" Height="96" Margin="0,-400,0,0" FontSize="64"
               Content="きふわらべの将棋盤"
               Foreground="{StaticResource kifuwarabeJacketColor}"  
               HorizontalAlignment="Center"
               IsHitTestVisible="False"/>

📖 [WPF/xaml] 上にかぶせたTextBlockを通り抜けて下のボタンがClickイベントを取れるようにする(IsHitTestVisible)

ramen-tabero-futsu2.png
「 👆 IsHitTestVisible="False" でいけた」

ohkina-hiyoko-futsu2.png
「 このウィンドウ、タイトルバー無いから、右へ左へ 動かせなくて 邪魔なんだけど?」

ohkina-hiyoko-futsu2.png
「 この紫色のところ マウスでドラッグして ウィンドウの移動できないの?」

kifuwarabe-futsu.png
「 髪の毛を 引っ張るのかだぜ?」

ramen-tabero-futsu2.png
「 まず マウスの座標を取得できるかどうかだな」

マウスカーソルの座標ってどうやって取得すんの?

📖 WPFでマウス操作の練習をしようぜ(^~^)?

ramen-tabero-futsu2.png
「 👆 別記事で」

ウィンドウの位置は取得できんの?

ohkina-hiyoko-futsu2.png
「 デスクトップ画面上でウィンドウを動かしたいのよ。次は スクリーン上でのウィンドウの左上位置の座標を取得してちょうだい」

📖 WPF でウィンドウの位置やサイズを記憶・復元するには
📖 [WPF] ウィンドウ位置の保存、復元
📖 How to set the location of a WPF window?

20210918wpf109a1.png

ramen-tabero-futsu2.png
「 👆 Windowオブジェクトが Left と Top のプロパティを持ってるから それを使えそうだぜ」

kifuwarabe-futsu.png
「 じゃあ マウスをプレスしたときに マウスカーソルのスクリーン座標と、
マウスカーソルのスクリーン座標と ウィンドウの左上のスクリーン座標の 差 を記録しておいて、
マウスドラッグ中に そのマウス位置をキャプチャーして
マウスカーソルの座標と ウィンドウの左上のスクリーン座標の差を考慮して
ウィンドウの Left と Top プロパティに与えろだぜ」

ohkina-hiyoko-futsu2.png
「 ややこし!」

網掛け

ramen-tabero-futsu2.png
「 ぶつぶつ模様の つかむとこを作ろうと思うんだが、WPFって、網掛けのブラシは使えるのかだぜ?」

📖 FillPatternStyle 列挙体
📖 Create a hatch pattern in WPF

kifuwarabe-futsu.png
「 👆 ハッチ パターンを自作できるみたいだぜ」

📖 wpf-brush-practice

ramen-tabero-futsu2.png
「 👆 別記事 書けるな」

何度でもクリック!→

むずでょ

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ の最近の記事