タグ

ブックマーク / hilapon.hatenadiary.org (7)

  • WPF の Dispatcher について勉強してみた - 周回遅れのブルース

    WPF の Dispatcher について勉強がてら自分なりに得た理解をまとめてみました。 WPF アプリケーションは、レンダリング(描画)用とユーザーインターフェイス用の2つのスレッドを用いて動作します。 レンダリングスレッドはバックグラウンド動作のため、開発者はアクセスできません。開発者が扱えるのは、ユーザーインターフェイス用スレッド(以下 UIスレッド)のみとなります。そしてこの UI スレッドは、パフォーマンス上の理由により(スレッドセーフにするとオーバーヘッドが発生し、描画遅延等の問題を起こすためか)スレッドセーフに設計されてないのが特徴です。 WPFでは、ほとんどのオブジェクトが UI スレッド上で動作する「シングルスレッドモデル」を採用しているため、UI スレッド外からそのオブジェクトにアクセスすると、例外が発生します。 例えば、以下のように ListBox へのアイテム追加

    WPF の Dispatcher について勉強してみた - 周回遅れのブルース
  • Q077. コードビハインドを使わずに親から子に画面遷移するには? - 周回遅れのブルース

    A.Livet を使うとコードビハインドを使わずに画面遷移が可能になります。Livet では画面遷移のメッセージアクションが提供されているので、これを使うといいでしょう。 ケースよっては、子画面を起動したら親画面を非表示にしたい場合もあります。その場合も、親画面のインスタンスさえ取得できれば、コードビハインドを使わず実装可能です。現在の View のインスタンスは、以下の方法で取得できます。 var window = Application.Current.Windows.OfType<Window>().SingleOrDefault((w) => w.IsActive); これに Livet の画面遷移用メッセージアクションと組み合わせれば、親画面から子画面を遷移できます。 注) Livet 1.0.4 以降、Window を非表示にしてメッセージを送信するには TransitionI

    Q077. コードビハインドを使わずに親から子に画面遷移するには? - 周回遅れのブルース
  • Q048. Window の最小化・最大化ボタンを無効にするには? - 周回遅れのブルース

    A. SetWindowLong で Window スタイルを設定します。 (2011/07/25 追記)リサイズ不可で最大化だけ無効にしたいなら ResizeMode を CanMinimize に設定するといいです。 関連記事 :Windowの最小化、最大化ボタン 実は私も id:akiramei さんと同じく、ユーザーさんから最大化だけ無効にしたいと要求合ったため Window のプロパティ調べていたら、どこにもないのにマジ愕然・・・。そこで、散々ぐぐって見つけた id:akiramei さんの記事を参考に対処させて頂きました。しかしこれだと Window を継承せねばならぬため、少し美しくないのも事実。そこで添付ビヘイビアに魔改造し、さらに VB の人も使えるよう VB に移植してみました。以下コードです。(でもこの程度のことは標準対応してほしいもんですね) Option Expl

    Q048. Window の最小化・最大化ボタンを無効にするには? - 周回遅れのブルース
  • WPF 超入門 〜「WindowsForms 開発者のための WPF 早わかりQ&A」 - 周回遅れのブルース

    WPF ですが、Windows Forms から移行した人は、私も含め要領掴めない人が多いようです。特に VB ユーザーはかなり苦戦してるんじゃないでしょうか?原因は、Windows Forms のプログラミングスタイルを引きずってるせいだと思います。 (#2010/01/17 追記 : 最近になって、あまりに Forms を無視した設計にし過ぎたせいだと思えるようになってきた・・・) とはいえ、いったん頭をリセットしてといっても、長年身体に染み込んだスタイルはそうそう変えられるものじゃありません。また Forms で簡単にできたことが、WPF では容易にできなくなった機能も一部確かにかなりあります。そこで Forms 開発者のために Q&A 形式で少し纏めてみました。以下、参考にしてください。 なお回答は、詳しい解説を省き簡潔なものにしております。詳しくは、回答を基に検索して調べてみてく

    WPF 超入門 〜「WindowsForms 開発者のための WPF 早わかりQ&A」 - 周回遅れのブルース
  • Q044. WPF で Tab オーダーを細かく設定する方法は? - 周回遅れのブルース

    A. Windows Forms なら、デザイナでフォームを開き、「表示」→「タブオーダー」で現在のタブインデックスが表示され、クリック順でタブインデックスを設定することができます。 関連記事 : Windows アプリケーションの利点 関連記事 : コントロールのTabIndex順で処理したいことってあるよね。階層のTabIndexを表現してみよう。 残念なことに WPF にはそのような便利な機能はありません。WPF の場合、タブインデックスは基的に XAML の要素順になります。 任意にタブオーダーを指定したいなら TabIndex プロパティを明示的に設定する方法もありますが、UserControl にTabIndex を設定すると、パレント側の TabIndex と衝突し想定外のコントロールにフォーカスがジャンプしたり、同じ UserContorol を複数貼り付けると、User

    Q044. WPF で Tab オーダーを細かく設定する方法は? - 周回遅れのブルース
  • MVVM パターンの ViewModel を C++/CLI で作ってみた(その2) - 周回遅れのブルース

    昨日の記事では、コマンドを定義してなかったのですが、日は C++/CLI でコマンドにチャレンジしてみました。 まず RelayCommand クラスを C++/CLI で書いてみます。するとこうなる・・・ // RelayCommand.h #pragma once using namespace System; using namespace System::ComponentModel; using namespace System::Windows::Input; namespace ViewModel { public ref class RelayCommand : ICommand { private: Func<Object^, bool>^ _canExecuteAction; Action<Object^>^ _executeAction; public: virtu

    MVVM パターンの ViewModel を C++/CLI で作ってみた(その2) - 周回遅れのブルース
  • 〜はじめに - 周回遅れのブルース

    目次 Hello World その壱(Visual Studio編) VS2010 版に更新 その弐(Blend 4編) Blend 版に更新 その参(Blend 2012編) Blend for VS 2012版に更新 レイアウト編 その壱「キャンバス」 その弐「グリッド〜その壱」 その参「グリッド〜その弐」 その四「グリッド〜その参」 その伍「スタックパネル〜その壱」 WindowsForms 開発者のための WPF 超早わかりQ&A 随時更新中 Window コントロール全般 IME コントロール 番外編 とある WPF の相互運用(ネタうんよう) エッセンシャル WPF その壱 エッセンシャル WPF その弐 とある動画の同期再生(ネタさいせい) WPF を習得するには はじめに ここ最近 WPF を触っているのですが、WindowsForms にどっぷり漬かった身としては、WPF

    〜はじめに - 周回遅れのブルース
  • 1