読者です 読者をやめる 読者になる 読者になる

SourceChord

C#とXAML好きなプログラマの備忘録。最近はWPF系の話題が中心です。

ClosedXMLでxlsxファイルの読み書きを行う

C#

C#から、xlsx形式のエクセルファイルを簡単に操作できる、ClosedXMLというライブラリを使ってみました。 Office2007以降のドキュメント形式について Office2007以降で使われている、xlsx/docx/pptxなどの形式のファイルは、OpenXMLというフォーマットで作成…

Json.NETで、JSONの葉ノードをすべて列挙する

C#

ちょろっと小ネタ、というか自分用メモ。 Json.NETを使って、C#からJSONファイル内の全ての末端ノードの情報を列挙してみました。 JSONファイルの、↓こういう末端のノードをすべて列挙します。

C#でJSONの読み書き~Json.NETを使ってみる~

C#

最近は、何かとJSON形式でデータを扱うこと多いですよね。 てことで、C#でJSONの読み書きをやってみました。C#でJSON扱うときは、↓のライブラリを使うのが定番っぽい。 Json.NET Json.NETJson.NET - Newtonsoft

WPF用にシンプルなコレクションエディタを作ってみた

ちょっと必要に迫られて、コレクションエディタ的なものを作ってみました。extended wpf toolkitのCollectionEditorほどのカッチリしたエディタじゃなくて、「ちょろっとコレクションの編集したいだけ」、って位の時に使えるかと思います。 コレクションを任…

C#でiniファイルの読み書き

C#

ちょっと必要に迫られたのでやってみました。 .netのアプリ開発では、基本的にiniファイルの使用は推奨されてません。 なので、C#でコードを書いてるとiniファイルなんてほとんど使いません。でも、今でもiniファイルを読み込みたいってことも極まれにありま…

WPFでの入力値検証・その8 ~複数のプロパティが絡むバリデーションを作成する~

今度は、オブジェクト内の複数のプロパティが絡むバリデーション処理を実装してみたいと思います。 以下のような画面を作り、文字列を入力するテキストボックスと、文字列の上限数を入力するテキストボックスを作ります。 ViewModelには以下の二つのプロパテ…

WPFでの入力値検証・その7 ~独自の検証ロジックを作成する~

久しぶりに、WPFのバリデーション・ネタです。 以前、DataAnnotationsの機能を使って、プロパティの属性としてバリデーションの条件を記述する方法を書きました。 WPFでの入力値検証・その3 ~DataAnnotationsを使う~ - SourceChord このバリデーションの条…

イベントのマークアップ拡張~コレクション走査パスへの対応~

WPF4.5の新機能~「イベントのマークアップ拡張」で、イベント発生時のコマンド呼び出しをスッキリ記述する~ - SourceChord この間作成したイベントのマークアップ拡張を使ったInvokeCommandExtensionクラスですが、以下のような問題点がありました。 コレ…

WPFのBindingマークアップ拡張の実装を見てみる

この前書いたイベントのマークアップ拡張ですが、記事の最後に書いた通り一部の動作に制限があります。 WPF4.5の新機能~「イベントのマークアップ拡張」で、イベント発生時のコマンド呼び出しをスッキリ記述する~ - SourceChord DataContextの変更に追従せ…

WPF4.5の新機能~「イベントのマークアップ拡張」で、イベント発生時のコマンド呼び出しをスッキリ記述する~

この記事はXAMLアドベントカレンダー2014 8日目の記事です。 前置き 先日のConnect();では、久しぶりにWPFの今後のロードマップの話がありましたねw WPFの次バージョンが気になる今日この頃ですが、今日は現時点での最新版WPF4.5で追加されていた新機能につ…

WPFで非同期&キャンセル可能な画像の読み込みを行う

昨日書いた、WPFでの画像読み込み処理をキャンセルする方法を、使いやすいようにクラスにしてみました。 非同期での読み込みと、CancellationTokenを用いた処理のキャンセルに対応したメソッドを作ってBitmapFrameExというクラスにしています。 WPFでBitmapF…

WPFでBitmapFrame.Createなどの画像ロード処理を強制的にキャンセルさせる

WPFで画像を扱ってて遭遇した困りごと。。。BitmapFrameやBitmapDecoder、BitmapImageクラスなど、WPFには画像の読み込みをする手段として色々なクラスが用意されています。 しかし、それらのどのクラスも、WinRTの画像系クラスのような○○Asyncっていう非同…

特定の値以上だったら動作するTriggerを作る

WPFのTrigger、便利ですよね。 Styleを作るときに、特定の条件の時に表示を切り替えたり簡単にできて、非常に便利。 でも、ちょっと痒いとこに手が届かない。 Triggerだと、指定したプロパティが特定の値の場合に動作します。 なので、「指定したプロパティ…

バインディングのDelayプロパティで、更新通知の頻度を制御する

WPF4.5でBinding構文に追加されたDelayプロパティというものがあります。 これ、地味に便利だけど、あまり知られてなさそうなのでメモしときます。BindingBase.Delay プロパティ (System.Windows.Data)このDelayプロパティの効果は↓の図のようなイメージです…

ウィンドウの動きに追従するPopupコントロールを作る

WPF標準のPopupコントロールについて WPFのPopupコントロールを使うと、任意のUIElementをポップアップ表示することができます。 この時ポップアップ表示される内容は、別ウィンドウとして元のウィンドウの上に表示されます。PopupのStaysOpenプロパティをFa…

WPFでの入力値検証・その6 ~複数のエラー表示への対応~

以前↓で書いたINotifyDataErrorInfoのベースクラスの実装ですが、一つのプロパティに複数のエラーが同時発生している、という状態を正しく表現できていなかったので修正しました。 WPFでの入力値検証・その5 ~INotifyDataErrorInfo実装のベースクラスを作成…

OpenCvSharpでWebカメラ画像のキャプチャ

今度は、Webカメラから画像をキャプチャしてWPFのウィンドウに表示してみました。 前回の動画再生とほとんど同じです。

OpenCvSharpで動画再生

OpenCvSharpネタの続きです。 今度はOpenCvSharpを使って、動画ファイルの再生をしてみます。

OpenCvSharpを使ってみる

OpenCVをC#などの.Net系言語で扱えるようにラップした、OpenCvSharpというライブラリを使ってみました。 コレ、すごくいい感じですね。 OpenCvSharp https://github.com/shimat/opencvsharp

引数に渡したインスタンスの実際の型に応じて呼び出すメソッドを切り替える

C#

C#のdynamicにこんな使い方あるのか!?と、、ちょっと目からウロコだったので試してみました。 下記ページの、dynamicを使ったマルチディスパッチの方法を参考にしてます。 [雑記] 多重ディスパッチ (C# によるプログラミング入門)

C#でzip圧縮

C#

タイトルの通りですが、C#でzip圧縮をやってみました。 .net 4.5からZipFile/ZipArchiveなどのクラスが追加され、C#から簡単にzipファイルを作ることができるようになってます。その他のクラスなどのリファレンスは以下を参照 http://msdn.microsoft.com/ja-…

WPFでの入力値検証・その5 ~INotifyDataErrorInfo実装のベースクラスを作成~

(10/20追記) この記事で書いたValidateableBaseクラスでは、複数のエラーが発生した時に正しくエラー状態を保持できません。 ↓に続きを書きました。 WPFでの入力値検証・その6 ~複数のエラー表示への対応~ - SourceChord 立て続けにWPFでの入力検証ネタを…

Prism.Mvvmを使ってみる・その2 ~ErrorsContainerの使い方~

↓の続きです。 Prism.Mvvmを使ってみる - SourceChordPrism.Mvvmには、ErrorsContainerというINotifyDataErrorInfo実装のためのヘルパークラスがあります。 今回はこれを使ってみます。

WPFでの入力値検証・その4 ~ErrorTemplateで検証結果の表示をカスタマイズ~

WPFの入力検証ネタの続きです。 Validationのエラー表示をカスタマイズしてみます。

WPFでの入力値検証・その3 ~DataAnnotationsを使う~

WPFの入力値検証ネタの続きです。 DataAnnotationsを使い、入力値の検証をシンプルに実装してみます。

WPFでの入力値検証・その2 ~INotifyDataErrorInfoを使ってみる~

随分と時間が空いたけど、、、 今度は、WPF4.5で追加されたINotifyDataErrorInfoを使って、入力値の検証をしてみます。

WPFでの入力値検証

WPFでの入力値の検証(Validation)関係の機能の使い方を色々まとめてみました。 参考リンク集 以下の記事を参考にやってます。 MSDN Magazine: 入力の検証 - WPF で複雑なビジネス データの規則を適用するWPFで入力値の検証を行うには、主に以下のような方法…

Prism.Mvvmを使ってみる

Prism 5.0では、各機能ごとにパッケージが細かく分けられています。 今回は、MVVM系の機能がまとめられた、Prism.Mvvmだけの部分を使用してみたいと思います。https://pnpmvvm.codeplex.com/ Prism.Mvvmに用意されてるのは、以下のような機能です。 クラス …

Prism5.0勉強中

Prismの新バージョンがリリースされてました。 https://compositewpf.codeplex.com/Prism.MvvmとかPrism.Interactivityといった感じに、機能ごとに細かく分かれているみたいなので、Prismの中のMVVM系の機能だけを使うこととかもできるみたい。 今まで、Pris…

WPFでフォントの列挙を行う方法

WPFにはフォント選択などのダイアログがありません。 で、フォント選択ダイアログを作るときなどに必要になる、WPFでのフォント一覧の列挙方法を調べてみました。結果はこんな感じ フォント一覧の列挙 まずは、フォントの一覧の表示からやってみます。 シス…

アプリの多重起動防止を拡張メソッド一発で行う

以前↓のような方法でアプリの多重起動防止のコードを書きました。 アプリの多重起動を防止する - SourceChord でも、イベントハンドラをちょこちょこと追加しなきゃいけなくて、もうちょっとスッキリ書けないか考えてみました。

MVVMな設計でVMからダイアログ表示を行う

MVVM界隈でよく話題になっている、「VMからViewに指示をしたい」という時の定番ネタ。 VMからダイアログを開く方法を添付ビヘイビアで作ってみました。↓の記事を参考に作ってみました。 トロこんぶ: 「MVVMでダイアログ表示のためにメッセンジャーを使用する…

VMからウィンドウを閉じる添付ビヘイビア

MVVMな設計でアプリを作るときの、よくある悩みとして、 VMから画面を閉じる処理をどうやればいいんだ?? というのがあります。これって、添付ビヘイビアを使えばスッキリ書けるのでは、、、と思い、 ウィンドウを閉じる動作を付加する添付ビヘイビアを作っ…

ウィンドウをフルスクリーン化する添付ビヘイビア

以前↓のような記事を書きましたが、このようにウィンドウをフルスクリーン化する処理を添付ビヘイビアにしてみました。 WPFでフルスクリーン表示 - SourceChord

ファイルドロップ時にコマンドを実行する添付ビヘイビア

添付ビヘイビアの仕組みが結構便利だと思ったので、ファイルドロップ時にコマンドを実行させるための添付ビヘイビアを作ってみました。 FileDropAttachedBehavior.Commandという添付プロパティにRelayCommandをセットすると、ファイルドロップ時にコマンドが…

添付ビヘイビアを使って、任意のコマンド呼び出しを行う

以前、↓で書いたRelayCommandですが、これはCommandプロパティを持つコントロールでしか使用できません。 XAMLからViewModelのメソッドにバインドする~RelayCommand~ - SourceChordRelayCommandをバインドできるのは、↓みたいにCommandプロパティを持って…

添付ビヘイビアを作る

WPFやSilverlightなどのプラットフォームで、昔からよく使われていたテクニックで添付ビヘイビアというものがあります。 この手法は、後にBlendSDKにも取り込まれ、Behaviorという共通の実装がSDKに導入されています。ですが、ここはまず、自分で添付ビヘイ…

XAMLでズルいデザイン~その4・ズルいグラデーション・配色~

今度はグラデーションと配色についてです。 参考リンク ズルいデザインテクニック2013 + セミフラット version // Speaker Deck

XAMLでズルいデザイン~その3・ズルい背景~

ちょっと時間が空きましたが、今回は↓のスライドでズルい背景と紹介されていたものをWPFで作ってみます。 ズルいデザインテクニック2013 + セミフラット version // Speaker Deck

素数をひたすら列挙し続けるイテレータブロック

C#

はてブのホットエントリで素数ネタが話題になってたので、何となく作ってみました。yield returnを用いると、自分でIenumerableな形のシーケンスを生成することができます。 ということで、素数を延々と列挙し続けるシーケンスを作ってみました。 無限のシー…

Win8でComboBoxがDisable時にグレーアウト表示されない

WPF&Win8環境でComboBoxをDisable表示にしても、ComboBoxに表示しているコンテンツがグレーアウト表示になりません。 これは、文章で書くより、画面キャプチャとコード見た方が早いかも。 ComboBoxのIsEnabled=Trueの時の表示 この表示は特に問題ありません…

ぼかした画像のBrushを作るマークアップ拡張

以前↓で書いた、ぼかしを強烈にかけた画像を高速にする方法ですが、 WPFで強めのブラーを高速にかける - SourceChord これを、Brushとして使えるようにしてみました。 マークアップ拡張も作ったので、以下のようにImageBrushを使うような感覚でぼかしの効い…

マークアップ拡張を作って、XAMLでグラデーションを簡単に書く方法

マークアップ拡張って、結構便利!! マークアップ拡張は初めて作ってみたけど、覚えておくと結構便利かも。マークアップ拡張については、以下のリンクが参考になりました。 http://okazuki.hatenablog.com/entry/20130103/1357205143 http://d.hatena.ne.jp/k…

WPFで強めのブラーを高速にかける

普通にぼかしを強めにかけてみる 背景画像として、ぼやけた画像を使いたいことって、結構あると思います。 で、普通にこれをやると、こんな感じだと思います。 <Window x:Class="WpfBaseTemplate1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Width="1024" Height="768"> <Grid> </grid></window>

VS2013向けのXAML Styler

XAML開発の定番拡張機能のXAML Stylerは、VS2013に対応してなくて残念に思ってたのですが、 XAML Stylerを、VS2013向けにビルドしなおして、VS Galleryに登録してくれた人がいるみたい。 Nico's digital footprint | Branching XAML Styler XAML Styler exte…

XAMLでズルいデザイン~その2・ズルいtext-shadow~

前回に引き続き、ズルいデザインで紹介されてた内容をWPFでマネしてみます。 今度は、文字の装飾をやってみたいと思います。 参考リンク ズルいデザイン(1):少ない手間と知識でそれなりに見せる、ズルいデザインテクニック (2/2) - @IT で、WPFでマネし…

XAMLでズルいデザイン~その1・ズルい線~

以前「ズルいデザイン」というスライドとかが話題になってましたが、その内容をWPFでマネしてみました。 参考リンク ズルいデザイン(1):少ない手間と知識でそれなりに見せる、ズルいデザインテクニック (1/2) - @IT ズルいデザインテクニック2013 + セミ…

WPFの開発用にコードスニペットを登録する

WPFのアプリ開発に役立ちそうなコードスニペットを作ってみました。 作ったのは、こんな感じのコードスニペットとか。 コードスニペットの作成方法は、↓の記事が参考になりました。 http://www.tk4.co.jp/develop/codesnippet/recipe.htmlコードスニペットの…

VSのプロジェクト・テンプレートを作成する

VisualStudioには、プロジェクトのテンプレートを、ウィザード形式で簡単に作る機能が備わっています。 で、さっそくWPF開発でよく使うファイルをまとめたテンプレートを作ってみました。テンプレートの作成には、↓の記事がとても参考になりました。 http://…

バインドしてるObservableCollectionを非UIスレッドから操作する

WPF4.5では、複数スレッドからのコレクション操作のサポートのために以下のメソッドが追加されました。 BindingOperations.EnableCollectionSynchronization メソッド (System.Windows.Data)これを使って、非UIスレッドからのObservableCollecion更新処理を…