サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
パリ五輪
nine-works.blog.ocn.ne.jp
C#、WPFのTipsへのリンク WPF関係 ・データバインディング その1 ・データバインディング その2 ・データバインディング その3 ・データバインディング その4 ・RelativeSourceによるソース指定 ・StringFormatを利用した価格表示 ・コマンドについて ・WPFでショートカットキーを設定する ・マウスのサイドボタンへのMouseBinding ・Styleを使用してコントロールのデザインを変更する ・ControlTemplateを使用してデザインを変更する ・VisualStateManagerを使ってみた1 ・VisualStateManagerを使ってみた2 ・DataTemplate ・DataTypeによるDataTemplate切り替え ・プロパティによるDataTemplateの切り替え ・WPFコントロールに独自
Taskを使って非同期処理 7:UIコンポーネントの操作 GUIアプリケーションで時間のかかる処理を行う場合、処理が終了するまでUIがフリーズしてしまします。 これを避けるためには時間のかかる処理を非同期処理する必要がありますが、UIコンポーネントの操作はUIスレッドから行う必要があります。(他のスレッドからUIコンポーネントを操作すると例外が発生してしまいます。) これはTaskで非同期処理を行う場合も同じです。そのため、時間のかかる部分は別スレッドで処理を行い、UIコンポーネントを操作する場合だけUIスレッドで処理を行うようにする必要があります。 UIで非同期処理といったらプログレスバーの処理でしょう。 というわけで、BackgroundWorkerを使わずにTaskを使ってプログレスバーを操作してみましょう。 ---- XAML ------------------------
async awaitとIProgressを使ってみる .NET Framework4.5では非同期処理機能としてasync, await追加されました。 async, awaitを利用することで非同期処理を同期処理と同じような感じでコーディングでき、処理の流れがわかりやすくなります。 そして、IProgress<T>という状況通知用のインターフェースも追加されました。 非同期処理と状況通知とくればやることは1つです。 async, awaitとIProgress<T>を使ってWPFで作業状況を表示してみます。 まずはModelを作ります。 ---- C# ------------------------------------------------------------------ // 通知内容 public class HeavyWorkProgressInfo {
Taskを使って非同期処理 1 Taskを使った非同期処理について、何回かに分けて紹介していきます。 (基本的な使い方とよく使うと思われる機能を紹介していくつもりです。細かい部分は省略しますので、MSDN等で調べて下さい) Taskを使う際に嬉しい点は、スレッドプールを意識する必要がない点。ココらへんの小難しいところはTaskがやってくれるので、普通にTaskを利用すればスレッドプールを利用して非同期処理を行なってくれます。 とりあえず、Taskを使った非同期処理の簡単なサンプルを紹介。 --- C# ---------------------------------------------------------------------- using System.Threading.Tasks; // Taskを使うのに必要 using System.Threading;
WPFでのデータ検証 3:ViewのエラーをViewModelに通知する 前回 の最後に説明したとおり、View側で発生したエラーはViewModelには通知されません。(int型のプロパティがバインドされているテキストボックスに数値以外の文字列を入力した場合等) この問題を解決する方法ですが、2つほど思いつきました。 1つはViewModelのプロパティをstring型にする方法です。 こうすればキャストの失敗をViewModelで判断できます。ただ、この方法の場合は、各プロパティでキャストや数値の検証を行う必要が出てきますし、バインドする時のStringFormatで数値として扱えなくなってしまいます。そのため、今回はこの方法は使いません。 もう1つの方法はValidation.Errorイベントを利用する方法です。 このイベントはNotifyOnValidationError
WPFでのデータ検証 1:IDataErrorInfoを使ったデータ検証 WPFでデータ検証を行う方法は「例外」、「IDataErrorInfo」、「ValidationRule」の3種類あります。 その中でもIDataErrorInfoを使う方法が一番無難だと思うので、IDataErroInfoを使ったデータ検証の方法を説明します。 今回はIDataErrorInfoの基本的な使い方と、Viewでエラーメッセージ等を表示する方法について説明します。 INotifyPropertyChanged等の実装が面倒なのでLivet(ver 0.99)を利用します。 IDataErrorInfoの実装部分についてはLivetを使わない場合でも同じなので、気にしないでください。 まずは、メインウインドウのViewModelにIDataErrorInfoを実装します。 ---- C# ----
WPFでファイルのドラッグドロップ WPFでのドラッグドロップを行う例その1として、ドロップされたファイルやディレクトリのパスを取得する方法を紹介。 テキストボックスにドロップされたファイルのパスを表示するプログラムを作成する。 まず、XAMLでドラッグドロップ可能なTextBoxを用意する。 -- XAML -- <TextBox Name="textBox1" AllowDrop="True" PreviewDragOver="textBox1_PreviewDragOver" Drop="textBox1_Drop" /> AllowDropをTrueにすることで、ドラッグドロップを受け付けるようにする。 あとは、DragOverとDropイベントを用意する。 -- C# -- private void textBox1_P
ListBoxの表示項目を並べ替える ListBoxに表示している項目をユーザーの指定した条件で並べ替える様にするにはCollectionViewSourceを利用するのが一番簡単だと思う。 常に特定の項目で並び替えを行うのならば、ここ で紹介したようにXAMLで並び替え条件を指定してもいいけれど、これだと並び替え条件を動的に変更出来ない。 今回はC#でCollectionViewSourceの並び替え条件を指定、変更する方法を紹介する。 CollectionViewSourceのSourceにはNameプロパティとPriceプロパティを持ったItemViewModelクラスのObservableCollectionを使うこととする。 まずはCollectionViewSourceインスタンスの作製方法について。 ---- C# ---------------------------
WPFでショートカットキーを設定する MenuItemでAltキーを使ったショートカットを登録するには、MenuItemのHeaderで、 <MenuItem Header="ファイル(_F)" /> と設定すると、実際のメニューでは、ファイル(F)と表示され、Altキーを押したあとにFキーを押すことでファイルメニューを開くことができる。 ここらへんはWindows.Formsと同じだったと思う。 ただし、ショートカットキー(Ctlr + S等)を登録するには、Windows.Formsとはやり方が異なる。 MenuItemには、InputGestureTextという項目があるが、これはメニューアイテムの右側にショートカットキーを表示するだけで、実際にショートカットキーが設定されるわけではないので注意。 WPFでショートカットキーを登録するには、 1)コマンドバインディングで
WPFコントロールに独自のプロパティを作成する WPFのユーザーコントロール等を作成する際に独自のプロパティが欲しくなることはよくある。 普通のプロパティでもXAML側から値を設定できるけれど、これだとバインディングが出来ない。 バインディングもできるようなカスタムプロパティを作成するには依存プロパティを作成する必要がある。 依存プロパティを作るにはDependencyObject(又はDependencyObjectを継承しているクラス)を継承する必要がある。(DependencyObjectのGetValueとSetValueを使用してプロパティの値の取得と設定を行うので) 以下にユーザーコントロールにCellSizeという名前の依存プロパティを作成する例を紹介。 今回は依存プロパティが主役なので、ユーザーコントロールの見た目はそのまま使用する。(XAMLではコードをかかない)
数値入力用テキストボックス 添付ビヘイビア編 前回 はスライダーを利用して数値入力用テキストボックスを作成したけど、今回試すのは添付ビヘイビアを使う方法。 添付ビヘイビアはコントロールに新しいふるまいを追加するためのもの。 基本的な事はMSDNの添付プロパティ の説明を参照。(添付ビヘイビアは添付プロパティ + αといった感じのもの。) 今回添付ビヘイビアで作成するのは、 1)テキストボックスへの入力制限機能(数値入力)のOn/Off 2)最小値と最大値プロパティ(数値入力時のみ有効) の2つの機能を作成する。 当然これらに該当するプロパティは無いので添付プロパティでプロパティを作成し、その値によって入力制限を行うようにする。 添付ビヘイビアのコードは以下のとおり。 WPFアプリケーションとは別に作成。別クラスとして作成しておけば再利用できるので。 (別クラスとして作成し
このページを最初にブックマークしてみませんか?
『nine-works.blog.ocn.ne.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く