WPF でアイコンを指定する
◆ Window の Icon プロパティにパス指定
◆ App.xaml のリソースで設定して Window は Style でリソース読み込みのほうが修正が簡単
◆ exe 自体も変えるならプロパティのプロパティでパス指定
◆ ico ファイルのみ
◆ exe のアイコンが Window で Icon 未指定の場合のデフォルト
◆ App.xaml のリソースで設定して Window は Style でリソース読み込みのほうが修正が簡単
◆ exe 自体も変えるならプロパティのプロパティでパス指定
◆ ico ファイルのみ
◆ exe のアイコンが Window で Icon 未指定の場合のデフォルト
これまでは特別気にしてなかったのですが いくつかアプリケーションを開いたりデスクトップにショートカットを並べたりしていて 全部デフォルトアイコンってわかりづらいな って思ったのでアイコンを指定してみます
これ

ちなみに このウィンドウのタイトル左にあるアイコンは WPF のプロパティでは非表示にできません
WindowsForms だとプロパティで簡単にできたのですが WPF は透明化とかも含めてウィンドウ自体のカスタマイズは弱めです
やること自体は不可能ではなくて user32.dll をインポートして Win32API を使って非表示にはできます
ちょっと面倒なので 左側に隙間開くことが嫌じゃないなら 透明アイコンにしてしまう手もあります
プロジェクトのルートに image フォルダを作ってその中に icon.png をおいてる場合に
とすればその画像が設定されます

なんか画質がイマイチです
元画像↓

画像を変えてパスが変わると全部書き直しです
なのでリソースにまとめてみます
App.xaml の Application.Resouces にスタイルを設定します
window_common というキーを設定しました
これを各 Window のスタイルで指定します
Icon はスタイル側で指定しているので削除します
今回は Icon だけですが window_common にいろいろ設定すればその Style を使う Window 全部に適用できます
Icon の代わりに Style を書かないといけないので 単純なコードの量的には対して変わりませんが 修正しやすくなったのが利点です
なので ウィンドウ左上のアイコンとタスクバーのアイコンが変わります
しかし exe ファイル自体のアイコンは変わってません
エクスプローラやデスクトップのアイコンはデフォルトのままです

ここも変えたい場合は WPF のプロパティではなく プロジェクト側の設定になります
ビルド時の exe ファイルのものですからね
プロジェクトのプロパティを開いて 「アプリケーション」タブの「リソース」のところのアイコンを設定します

png は使えなくて ico ファイルにしないといけませんでした
変換サービスはいっぱいありますが 今回私はここにしました
http://icoconvert.com/
たまにサイズの選択ができないところもありますが 複数選択して作れるサイトが良いと思います
アイコンを設定してビルドすると

と exe ファイルの見た目も変わりました
exe のアイコンを指定すると 各ウィンドウに指定しなくてもデフォルトが exe のものになります
Style の部分を削除しても

となっています
なんか ico ファイルの方がキレイですね
exe のアイコンと一緒でいいなら Window の Icon プロパティは指定は不要ですが 「特別このウィンドウはアイコンを変えたい」 というときには上に書いた方法でウィンドウに Icon をつけたり Style で共通のものを使ったりして指定することができます
これ

ちなみに このウィンドウのタイトル左にあるアイコンは WPF のプロパティでは非表示にできません
WindowsForms だとプロパティで簡単にできたのですが WPF は透明化とかも含めてウィンドウ自体のカスタマイズは弱めです
やること自体は不可能ではなくて user32.dll をインポートして Win32API を使って非表示にはできます
ちょっと面倒なので 左側に隙間開くことが嫌じゃないなら 透明アイコンにしてしまう手もあります
アイコンを変える
単純にウィンドウのアイコンを変えるのなら XAML の Window の Icon プロパティにアイコンファイルのパスを書けば変わりますプロジェクトのルートに image フォルダを作ってその中に icon.png をおいてる場合に
<Window x:Class="WpfApp1.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:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="300" Width="400"
Icon="/image/icon.png">
<Grid>
<Button Width="200" Height="200">Button</Button>
</Grid>
</Window>
とすればその画像が設定されます

なんか画質がイマイチです
元画像↓

全部に書くの大変
Window がいっぱいあると全部の Window にアイコンを書くのって大変です画像を変えてパスが変わると全部書き直しです
なのでリソースにまとめてみます
App.xaml の Application.Resouces にスタイルを設定します
<Application.Resources>
<Style x:Key="window_common" TargetType="Window">
<Setter Property="Icon" Value="/image/icon.png"/>
</Style>
</Application.Resources>
window_common というキーを設定しました
これを各 Window のスタイルで指定します
Icon はスタイル側で指定しているので削除します
Title="MainWindow" Height="300" Width="400"
Style="{StaticResource window_common}">
今回は Icon だけですが window_common にいろいろ設定すればその Style を使う Window 全部に適用できます
Icon の代わりに Style を書かないといけないので 単純なコードの量的には対して変わりませんが 修正しやすくなったのが利点です
exe のアイコンも変える
今までの方法だと ウィンドウのアイコンを設定していますなので ウィンドウ左上のアイコンとタスクバーのアイコンが変わります
しかし exe ファイル自体のアイコンは変わってません
エクスプローラやデスクトップのアイコンはデフォルトのままです

ここも変えたい場合は WPF のプロパティではなく プロジェクト側の設定になります
ビルド時の exe ファイルのものですからね
プロジェクトのプロパティを開いて 「アプリケーション」タブの「リソース」のところのアイコンを設定します

png は使えなくて ico ファイルにしないといけませんでした
変換サービスはいっぱいありますが 今回私はここにしました
http://icoconvert.com/
たまにサイズの選択ができないところもありますが 複数選択して作れるサイトが良いと思います
アイコンを設定してビルドすると

と exe ファイルの見た目も変わりました
exe のアイコンを指定すると 各ウィンドウに指定しなくてもデフォルトが exe のものになります
Style の部分を削除しても

となっています
なんか ico ファイルの方がキレイですね
exe のアイコンと一緒でいいなら Window の Icon プロパティは指定は不要ですが 「特別このウィンドウはアイコンを変えたい」 というときには上に書いた方法でウィンドウに Icon をつけたり Style で共通のものを使ったりして指定することができます