開発備忘録

WPF(Xaml + C#)の話題を中心に.Net関連についてのブログです。

MediaPlayer でファイルオープン時のノイズ発生回避方法について

WPF でWAVE ファイルなどのメディアファイルを再生するとき、System.Windows.Media.MediaPlayer を使用していたのですが、複数ファイルを纏めてオープンしたときに何故か楽曲が少しだけ再生される現象が発生しました。 ここではその回避方法についてまとめて…

フォルダ内にあるMedia の再生時間を取得する(C#/WindowsAPICodePack)

特定のフォルダ内にあるメディア(MP3とかAVIとか)ファイルの再生時間を取得する方法のメモ 動作環境 OS : Windows 10 64bit .NET Framework : 4.6 Visual Studio : 2015 Enterprise WindowsAPICodePack は、以下の方法でインストールします。 www.nuget.or…

JR回数券と定期券の併用方法について

たまに使用する電車の乗車回数券ですが、定期券との併用方法をよく忘れるのでメモこの記事で紹介する内容はJR西日本(大阪環状線、JR神戸線)でのみ使用可能であることを確認しています。 全ての線区・区間が同じ仕組みかどうかはわかりませんのでご注意くだ…

Jenkins でxUnit + OpenCover を使ったカバレッジ集計・レポート表示方法について

少し前にJenkins でxUnit を使ったユニットテストの実行方法を試しました。 iyemon018.hatenablog.com今回は、Jenkins でxUnit でユニットテストを実行し、OpenCover を使ってカバレッジを集計・プロジェクトページに表示する方法についてメモします。 動作…

TFS でTF14061 が表示されたときの対処方法

TFS 使っているときにTF14061 なるエラーメッセージが表示されたときの事象と対処方法メモです。 現象 Visual Studio でTFS と接続しているときに、チーム エクスプローラー上に"予期しないファイルの終わりを検出しました。"というメッセージが表示される。…

WPF でVisualTree のヒット テストを実行する

VisualTreeHelper を使用すると特定のコントロールのVisualTree 要素を検索したりできることは知っていたのですが、今まで使用する機会は殆どありませんでした。 今回使用したときに躓いた箇所も含めて、その使用方法をメモします。以下、動作環境です。 OS …

ViewModelのプロパティ変更をトリガーにアニメーションする方法

WPF でViewModel のプロパティが変更されたときにStoryboard を開始する方法で少し躓いたのでメモ。 開発環境は以下の通り。 OS : Windows 10 64bit .NET Framework : 4.6 Visual Studio : 2017 GUIアーキテクチャ : WPF ViewModel のプロパティの変更をトリ…

(WPF) ウィンドウのバウンド エフェクトを無効化する方法

Windows10 でスクロールバーが表示されたListBox をタッチ操作したときにバウンドするようなUI 表現を無効化する方法についてメモします。タブレットでWindows10 を使用している際に、エクスプローラーなどで一覧表示している際に、領域外までスクロールする…

Windows10 + WPF でタッチ フィードバックを無効化する(※)

Windows10 上のWPF アプリケーションでタッチ フィードバックを無効化する方法にいてメモ※まず最初に、この記事で紹介する方法はあるパターン(後述)に対応できていません。 そのパターンでの対応方法が見つかれば追記 or あらたに記事を書きます。 タッチ …

Windows10でエッジ スワイプUI を無効化する方法

teratail にも質問したんですが、 teratail.com 結局回答が無かったので自力で調べました。エッジ スワイプってなぁにって言うと、タブレットなどでディスプレイの端から中央に向かってスワイプする操作のことです。 以下のページでアクションセンターを表示…

Setupインストーラーでインストール後に再起動する方法

デスクトップアプリでインストーラーからインストールが完了した後にOSを再起動する方法についてメモします。 動作環境 OS : Window 10 開発環境 : Visual Studio 2015 下準備 Visual Studio の拡張機能であるインストーラープロジェクトを追加します。Micro…

Windows Forms のChart を使う~StripLine:グラフの装飾~

Windows Forms で、StripLine を使うと色々便利だったのでメモ。 StripLineってなに? MSDN StripLineより抜粋 ストリップ ラインは、標準またはカスタムの間隔でグラフの背景に影を付ける水平または垂直の範囲です。 ストリップ ラインを使用することができ…

Windows Forms のChart を使う~SeriesChartType:グラフ系列種別~

最近Windows FormsのChartを使用する機会があったので、備忘録として使い方を残します。まず今回はChartにどんな種類のグラフが使用できるのか見ていきます。 Chartの系列は"Series"プロパティでアクセスすることができます。 この系列の種類を変えるには、C…

Visual Studio 2017を使ってみた

いよいよリリースされたVisual Studio 2017 さっそくPCにインストールしてみました。まぁ、ぶっちゃけどんな機能が追加されたのかは以下のページを参照したほうが手っ取り早いです。www.atmarkit.co.jp www.visualstudio.comリリースノートは以下から。 www.…

WPFでCarouselPanelを作る

前回、PathListBoxを使って遊んでみましたが、今回もPathListBoxを使ってみます。 iyemon018.hatenablog.comカルーセルパネル(Carousel Panel)は、左右にコンテンツをスライドするあれです。 まずはサンプルプログラムの動作を見てみます。このように複数の…

WPFでPathListBoxを使う

WPFのコントロールにPathListBoxというものがあります。 これは、通常のItemsControlとは少し異なる動作をします。 百聞は一見にしかず、まずは以下のイメージを御覧ください。単純な動作ではありますが他のList系コントロールとは明らかに動作が異なります…

JenkinsでxUnitを実行・レポート出力する方法

JenkinsでxUnitを実行したときに少しハマったのでメモメモ。 JenkinsでxUnitを使用している場合、MSTestと同じ方法では実行できません。 xUnitを使用するには、"xunit.runner.console"が必要です。 以下、実行環境です。 Jenkins : 2.31.2 .NET Framework : …

Jenkinsでインストーラーを作成する方法

Visual Studio 2012以降、昔ながらのインストーラセットアップ プロジェクトが拡張機能で使用することができます。 (Visual Studio 2010は、Install Shield一択だったのですがあれは何だったのか…) できればこのあたりもJenkinsで実行できれば、 開発リポ…

Jenkinsで独自NuGetパッケージの復元メモ

以前、Jenkinsを使用してNuGetパッケージを復元することができました。 iyemon018.hatenablog.com今回は独自に作成したNuGetパッケージの復元を行います。 例えば社内で管理しているライブラリの復元も行うことができます。まずは下準備1. Jenkins実行ユーザ…

Windows上のJenkinsを特定のユーザーで実行する

Windows上でJenkinsを起動しているときに実行しているユーザーを切り替える必要があったのでメモ。 環境は以下の通り。 OS : Windows Server 2012 R2 Jenkins : Ver.2.32.1 JenkinsはWindows上ではサービスで起動していて、各ジョブはOSのシステムが実行して…

JenkinsでNuGetパッケージの復元メモ

Jenkinsを使用してプロジェクトをビルドするとNuGetパッケージの復元が実行されなかったので、その解決方法をメモメモ 環境は以下の通り Jenkins:Ver.2.32.1 Visual Studio:2015 Enterprise Team Foundation Server:2012 SP4 Visual Studio 2015からはNuGet.…

TFS構成DBからプロジェクト コレクション名を列挙する

またまたTFSネタです。 TFSのDBをバックアップする上で、プロジェクト コレクション名が必要だったのですが、TFSが現在管理しているプロジェクト コレクション名を全て取得する方法って無いのかな―と調べていました。 結果から言うとそれっぽい情報は無かっ…

TFS構成ツールを使用してコレクションのアタッチ/デタッチを実行する方法

今日もTFSネタです。 TFSには”TfsConfig.exe"という構成ツールが含まれていますが、これを使用してコマンドラインからプロジェクト コレクションのアタッチ/デタッチ/削除を行うことができます。 アタッチ C:\Program Files\Microsoft Team Foundation Ser…

Team Foundation Serverデータベースの復元方法メモ

新年早々にサーバー機の新調に伴い、Team Foundation Serverのバックアップと復元を行ったのですが、かなり手こずったので手順をメモメモ オチ的には、「TFS 管理コンソールのバックアップ・復元機能は使用しないほうがいい」ということでした。 使用する環…

WPFのCalendarコントロールをカスタマイズ

WPFのCalendarコントロールは日付を選択する場合に便利ですが、標準ではサポートされていない機能があります。 例えば土、日、祝日の場合に文字色を変更するなど。 日本国内限定の使用とはいえ、地味に欲しい機能ではあります。 ただ、Calendarコントロール…

Staticなフィールドをバインドするには

WPF

WPFではViewのDataContextからプロパティをバインドしてデータの入出力ができますが、 staticフィールドのバインドも可能になっています。例えば、DateTime.Todayをバインドする場合は次のようになります。 <TextBlock Text="{Binding Source={x:Static system:DateTime.Today}, Mode=OneWay, StringFormat={}{0:yyyy/MM/dd(dddd)}, ConverterCulture=ja}" /> Binding Source= の部分をx:Static system:DateTi…</textblock>

OnRenderで再描画されない現象と対策

WPF

ハマったのでメモWPFアプリケーションであるコントロールをXamlではなくOnRenderメソッドをオーバーライドして自前で描画処理を実装していました。 ビルド、実行して問題なく動いていましたが、あることをするとOnRenderメソッドが呼ばれないことが発覚しま…

TimeSpan型のStringFormatの設定

WPF

WPF でTimeSpan 型のプロパティをバインドした際のStringFormat を忘れてハマったのでメモ。 DateTime 型と表記が異なる上にバインドの設定ウィンドウに出てこないので割と忘れます。 <TextBlock Text="{Binding TimeSpan, StringFormat={}{0:hh\\:mm\\:ss\\.fff}, ConverterCulture=ja-jP}" /> コロンなどの記号の前に'\'を2個入れましょう。ついでなのでDateTime </textblock>…

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

Visual Studio であると便利(これがないと生きていけない)拡張機能を紹介します。 ここで紹介する拡張機能は、基本的にVisual Studio 2013/2015 Community 上で使用可能であることを確認しています。 Xaml Style ダウンロードページ visualstudiogallery.m…

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

Visual Studio であると便利(これがないと生きていけない)拡張機能を紹介します。 ここで紹介する拡張機能は、基本的にVisual Studio 2013/2015 Community 上で使用可能であることを確認しています。Ghost Docダウンロードページ submain.com※画面右[Downl…

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

Visual Studio であると便利(これがないと生きていけない)拡張機能を紹介します。 ここで紹介する拡張機能は、基本的にVisual Studio 2013/2015 Community 上で使用可能であることを確認しています。VSCommandsダウンロードページ visualstudiogallery.msd…

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

Visual Studio であると便利(これがないと生きていけない)拡張機能を紹介します。 ここで紹介する拡張機能は、基本的にVisual Studio 2013/2015 Community 上で使用可能であることを確認しています。Productivity Power Toolsダウンロードページ visualstu…

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

WPF

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

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

WPF

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

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

WPF

先日、仕事でWPF のパフォーマンス調整をしました。 その際に参考になった記事や対策をまとめました。 ここでは、WPFのパフォーマンス改善のためのガイドラインやTipsなどを記述します。 WPFの動作が遅くなる理由は多岐にわたり、かつ複合的な要因がある場合…

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

WPF

WPFでStoryboardをコードビハインドで終了させる際に、詰まったポイントをメモメモ private void StartButton_Click(object sender, EventArgs e) { // storyboard には既にリソース上のStoryboard を設定しているものとする。 storyboard.Start(Ellipse1); …

DataGridColumnにデータバインドするには

業務アプリを制作する際にDataGridのある列の表示非表示を切り替えたいケースがあると思います。 表示だけでなく、ヘッダーや幅を変えたいなどの場合も同様です。 しかし、少し手を加えなければDataGridColumn のバインディングは不可能です。 (なぜかは後…

シリアライザ~BinaryFormatter~

前回シリアライザについての説明を軽くしました。 今回はその中の一つ、BinaryFormatterについて説明していこうと思います。 特徴 MSDNのページはこちら↓↓↓ BinaryFormatter クラス (System.Runtime.Serialization.Formatters.Binary) BinaryFormatterはその…

C#でシリアライズ

この前仕事でシリアライズについていろいろ調べてみたんですが、今後も使うことは多いと思うのでメモ 内容的には、画面で入力された情報を保持しておき、変更があれば確認メッセージボックスを出力して入力内容を破棄するかどうかを選択するというもの。 WPF…

オブジェクトの3分シリアライズ(XmlSerializer)

アプリケーションを作成する際に設定ファイルなんかをXMLファイルに定義する場合、みなさんはどのようにXMLのシリアライズクラスを作成しますか? 手順的には、 XMLファイルを作成する。 シリアライズクラスを作成する。 読み込み/書き込み処理を作成する。…

時刻の比較

C#

時刻の比較って結構使うんですが、よく忘れるのでメモ いつも迷って調べるんですが、だいたいMSDNのDateTime.CompareToに飛ばされます。 あのメソッドってミリ秒単位で比較するんで結局ある程度整形した形で比較しないといけないんですよね。 比較するにして…

ComboBoxの使い方

WPFを知らない人からComboBoxの使い方が分からない、とよく言われます。 WindowsFormからやってきた人にとってはComboBoxは序盤のハードルとなるのでは無いでしょうか? かくいう私もそうでした。 しかし、毎度毎度口頭で説明したりサンプルを作るのも面倒な…

AutoMapperを使用したオブジェクトのマッピング

先日、ある方からAutoMapperというものを教えていただきました。 どうやらオブジェクトのマッピングが簡単に実現できるとのことなので早速調べた所、結構便利だったのでメモ 1.AutoMapperとは? AutoMapperは、オブジェクト同士を自動的にマッピングしてく…

WindowChromeの問題点

WPF

前回WindowChromeで独自ウィンドウを作成しましたが、今回はWindowChromeを使用したうえでの問題点を見ていきます。 1.最大化した時にデスクトップのクライアント領域を超える。 通常、ウィンドウを最大化した場合、デスクトップのクライアント領域を超え…

WindowChromeを使用した独自ウィンドウの作成

WPF

WPFでウィンドウを独自に作成したい場合は、自分でWindowのControlTemplateをゴリゴリ作るのも楽しいのですが、もう少し簡単に実現したい時、WindowChromeを使用するといいと思います。 WindowChromeとは? WindowChromeは、Windowの非クライアント領域にWin…