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

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

WPF

(WPF).NET Framework で作ったアプリを.NET Core 3.0 Preview へ移行した

.NET Framework で作成していたWPF アプリを.NET Core 3.0 Preview へ移行してみました。 というのもxUnit.NET でテストコードを書いていたんですが、.NET Framework だとテストを実行するにはxunit.console.runner を実行するしかなく、Azure Pipelines で…

(WPF)Live Charts をMVVM で使ってみる -円グラフ-

野暮用でグラフを使ったWPF アプリ開発をしたかったので前々から気になってたLive Charts を使ってみました。 私が調べた限りだとLive Charts をMVVM で使うサンプルの数が乏しい(特に"PieChart")ので備忘録がてらここに残しておきます。 Live Charts って…

(WPF)Windows Community Toolkit の MapControl を使ってみた

随分と昔(といっても今年だった気がする)にXAML Islands というキーワードを目にしたのですが、そのパッケージが OSS 化されて WPF でも使用できるとのことなので試しに使ってみました。 XAML Islands って? Windows のデスクトップ アプリケーション開発…

(WPF)タッチキーボードを表示する -その2-

先日、WPF でタッチキーボードを表示する方法について書いたのですが、実際にアプリに組み込む場合はこの方法だけでは不足していたので、もうちょい実用的なコードとしてまとめてみます。 iyemon018.hatenablog.com 動作環境 前回と同じ 問題点 タッチキーボ…

(WPF)タッチキーボードを表示する

Windows10 + WPF でTextBox を選択したときにタッチキーボードが表示されない現象についてハマったのでメモ 動作環境 Windows 10 Home 1709 言語 : C# .NET Framework : 4.6 GUI アーキテクチャ : WPF タッチキーボードが表示されない 通常、Windows10 環境…

(WPF + MVVM)Material Design In XAML でモダンなダイアログを表示する

先日、業務でMaterial Design In XAML を使用したダイアログ表示機能を作ったのでメモ。 Material Design In XAML って? Google のAndroid OS に採用されているデザインシステムである"Materail Design" をMicrosoft のXAML で実現しますよというOSS プロダ…

Google Cloud Platform Vision API を.NET で使ってみた

先日、Google Cloud Platform のVision API を使用してOCR を試したんですが、思いのほか簡単にできたのでその使い方についてメモメモ。 ※なお、この記事は 2018年5月13日 時点の内容です。最新の情報とは異なる可能性がありますのでご注意ください。 Google…

(WPF)要素のスクリーンキャプチャーを保存するTriggerActionを作る

WPFで画面上の要素をキャプチャーして画像ファイルとして保存するような要件がワリとありますが、どうせならTriggerActionで作られたプロダクトは無いかなーと思って探してみたところ、すぐには見つからなかったので自作してみました。以下、今回の開発環境…

MediaPlayer でファイル再生時のエラー回避方法について

またもやWPF のMediaPlayer ネタです。 MediaPlayer のイベントにMediaFailed がありますが、このイベントで以下のようなメッセージが出力される場合があります。 HRESULT からの例外:0xC00D11BA これはWindows Media Player が出力している例外メッセージで…

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

前回同様、WPF のMediaPlayer のお話です。 iyemon018.hatenablog.com今回は楽曲ファイルの読み込み時ではなく、再生時に発生するノイズについてです。 このノイズも必ず発生するものではなく、特定の条件の楽曲ファイルと環境が揃わなければ発生しません。 …

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

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

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 あらたに記事を書きます。 タッチ …

WPFでCarouselPanelを作る

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

WPFでPathListBoxを使う

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

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>…

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); …

ComboBoxの使い方

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

WindowChromeの問題点

WPF

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

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

WPF

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