やる気駆動型エンジニアの備忘録

WPF(XAML+C#)の話題を中心に.NET/Android/CI やたまに趣味に関するブログです

Visual Studio で便利な拡張機能 その1

Visual Studio であると便利(これがないと生きていけない)拡張機能を紹介します。
ここで紹介する拡張機能は、基本的にVisual Studio 2013/2015 Community 上で使用可能であることを確認しています。

Productivity Power Tools

ダウンロードページ
visualstudiogallery.msdn.microsoft.com


開発者の生産性を向上させるための拡張機能と銘打ったMicrosoft 製の拡張機能です。
Microsoft 自身が制作していて生産性を向上させるというのであれば、最初からVisual Studio に統合されていればいいじゃない というツッコミは有りますが、この拡張機能自体は非常に有用な機能を複数有しています。

(1) ソリューションエクスプローラー上でのエラー表記

何らかのビルドエラーが発生した場合にソリューションエクスプローラー上に赤い波線でエラーが発生していることが分かります。
エラーだけでなく、警告時には緑色の波線で表現されたりもします。
これがあるだけでいちいち[エラー一覧]ウィンドウを開く必要性がなくなります。
 

f:id:iyemon018:20160405235411p:plain

  • エラーのあるファイルにマウスオーバーすると、そのエラーの内容が見える

f:id:iyemon018:20160405235456p:plain
 
また、エラー ファイルのみフィルターもできます。
f:id:iyemon018:20160405235654p:plain
 

(2) 検索文字列のハイライト

検索(Ctrl + F) で一致した文言をエディターのスクロールバー上にインジケーターとして表記されます。
また、テキストエディター上では一致した文言がハイライトで表現されます。
 

  • 文字列"Command"で検索したところ

f:id:iyemon018:20160405235920p:plain
↑↑↑テーマを濃色にしているとわかりにくいですね…

(3) "=" の位置を揃える

私のお気に入り機能のひとつです。
通常、コードの見やすさを考えて代入時の"="を垂直に揃えたりしますよね。
"=" の位置が行ごとにバラバラだっただけで可読性が格段に低くなります。
ただ、この位置を揃えるのって結構面倒だったりします。
この機能を使用すればそんな煩わしさからは解放されます。
使い方は簡単。
"=" の位置を揃えたいコードを選択して、Ctrl + Alt + ] を入力するとあら不思議
これが
f:id:iyemon018:20160406000355p:plain
 
こうなります
f:id:iyemon018:20160406000401p:plain

ちなみに選択していても間に空行があったり、"="以外(例えば",")には適応できませんのであしからず。


この他にも様々な便利機能が搭載されています。
詳細は上記のダウンロードページから参照してください。

WPFパフォーマンス改善その2.アニメーションのパフォーマンス改善策

ここではWPF のアニメーションの動作改善策について記述します。

WPF のアニメーションは簡単に作成できる反面、最適化を実施しない場合だと無制限にCPU/GPU パワーを使用し続けます。
アニメーションにリソースを割かれると、それにともなって他のユーザーコントロールの動作も遅くなります。

続きを読む

WPFパフォーマンス改善その1. 初期表示(描画)速度の改善策

初期表示(描画)速度の改善策
ここでは初期表示、つまり画面をインスタンス化してから描画されるまでの時間を短縮するための改善策や
画面の再描画処理時間の短縮方法を記述します。

続きを読む

WPFパフォーマンスの調整について

先日、仕事でWPF のパフォーマンス調整をしました。
その際に参考になった記事や対策をまとめました。


ここでは、WPFのパフォーマンス改善のためのガイドラインやTipsなどを記述します。
WPFの動作が遅くなる理由は多岐にわたり、かつ複合的な要因がある場合が殆どです。
改善策は1つだけでなく、複数の対策を講じてください。

続きを読む

StoryboardのStopに失敗する場合の対処法

WPFでStoryboardをコードビハインドで終了させる際に、詰まったポイントをメモメモ

private void StartButton_Click(object sender, EventArgs e)
{
    // storyboard には既にリソース上のStoryboard を設定しているものとする。
    storyboard.Start(Ellipse1);
}

private void EndButton_Click(object sender, EventArgs e)
{
    // ここでアニメーションを停止させたい。
    storyboard.Stop(Ellipse1);
}

このようなコードがあったとして、実行すると以下のメッセージが表示されました。

System.Windows.Media.Animation Warning: 6 : Unable to perform action because the specified Storyboard was never applied to this object for interactive control.; Action='Stop';

なんじゃこりゃ
と思いいろいろ調べてみましたが、以下のページが参考になりました。

stackoverflow.com

警告メッセージをざっくり訳すと、
"Storyboardが対話制御設定されていないからStop動作は実行できないよ。"
とのこと。

で、上記のページを見るとBeginの第三引数に対話制御を可能とするかどうかのフラグを設定せよ とのこと。
なので正しいコードはこう↓↓↓

private void StartButton_Click(object sender, EventArgs e)
{
    // storyboard には既にリソース上のStoryboard を設定しているものとする。
    storyboard.Start(Ellipse1, true);
}

private void EndButton_Click(object sender, EventArgs e)
{
    // ここでアニメーションを停止させたい。
    storyboard.Stop(Ellipse1);
}

これが例外も発行しないし、出力ウィンドウにささやかなメッセージだけを残すので全く気が付かなかった。
というか、メッセージに気がついても修正方法がわかんなかった。