イントレ
  • 新規
  • ペイント
  • 一覧
  • 管理
  • Home
  • ダウンロード
  • 日記
  • イラスト
  • リンク
  • About
  •  RSS

本文へジャンプ


イントレ。

Tag for "WPF"

«Prev || 1 · 2 · 3 · 4 · 5 · 6 · 7 · 8 · | Next»

Full-row Selection TreeView。

以前チャレンジ失敗して放置してたんだけど、ズバリな回答案があった。

Highlight whole TreeViewItem line in WPF

Borderの中にGridを配置してGrid.Marginを調整することで子要素を段落下げしている。
TreeViewItemの親を辿ることで階層の深さを取得、Grid.Marginにコンバータ経由で渡している。

こんなシンプルな解決案があったなんて。・・・無念。

<追記>
・・・って思ったんだけど、DataTemplateと組み合わせると問題発生。
コンバータ経由で階層の深さを取得する際のタイミングの問題で、
TreeViewItem.Itemsに追加→スタイル設定となって欲しいんだけど逆になるっぽい。

TreeViewItem.Parentが変化したら再計算して適用すればいいのですが、
それを検知する方法がない・・・。
困った。
</追記>



そして、日記を更新する癖が完全に抜けてる件。

WPFでWinFormsのContextMenuを実行する件。

WPFのコンテキストメニューの見た目がなんか嫌。なの。
     ↓
WinFormsの使えばいいじゃん?
     ↓
WinForms.ContexuMenu.Show()がWinForms.Control要求する。なの。
     ↓
WinForms.ContextMenuStrip使えばいいじゃん?
     ↓
独自な外見は嫌。なの。
     ↓
じゃ、WinForms.ContextMenuのハンドルもらってAPIで表示すればいいじゃん?
     ↓
TrackPopupMenuExで実行してもクリックイベント発行されない。なの。


という経緯で、調査したらリフレクションでコマンドディスパッチャを呼び出せばOKっぽい。

具体的には、System.Windows.Forms.Command.DispatchID()メソッドを呼び出す。
Commandクラスはinternalで、DispatchIDメソッドはstatic。
DispatchIDはコマンドIDを引数にとるので、
TrackPopupMenuEx()にTPM_RETURNCMD(0x100)を指定して、コマンドIDを返すようにしてもらう。

var menu = new WinForms.ContextMenu(...);
var id = TrackPopupMenuEx(menu.Handle, 0x100, x, y, hWnd, IntPtr.Zero);
if (id != 0)
{
  var asm = typeof(WinForms.ICommandExecutor).Assembly;
  var type = asm.GetType("System.Windows.Forms.Command");
  var method = type.GetMethod("DispatchID");
  method.Invoke(null, new object[]{ id });
}

これでMenuItem.Clickイベントが発動するようになった。
とはいえinternalクラスを使ってる以上、WinFormsの中身の構成が変わったら使うものにならなくなるわけだが。

WPF4は便利になりそうだ。

WPF 4 (VS 2010 and .NET 4.0 Series)

ScottGu's Blogより。
MSDNライブラリよりも詳細に書かれている気がする。
WPF RibbonはCTP扱いでcodeplexにて公開されたみたい。

コントロール群の説明に書かれてたWPF Bag O'Tricksって初めて聞いたけど、なかなか興味のそそるコントロール群が揃ってます。
コントロールじゃないけど、NotifyWorkerとか便利そう。
Bag-o-Tricks March '08 Edition

なんか追いかけるのだけで疲れる・・・。

Win7ほっといてVS2010。

Visual Studio 2010 and .NET Framework 4 Beta 2

上記リンクからVisualStudio2010 Beta2の英語版がダウンロード出来るようです。
Expressも含めた全エディションが用意されてますね。


今回はエディションがExpress/Professional/Premium/Ultimateの4つになるみたいです。
StandardがProfessionalに吸収された形かな?
ぶっちゃけ、C#にメインならExpressで困ることはほとんど無いわけですが。
ちなみに、RTMが来年3月22日だそうです。

・・・と書いてある間にインストールが始まってました。
.NET Framework 4のインストールのために再起動要求されるのはBeta1と変わらずですね。

で。
早速起動してみてるんですが、Beta1と比べると立ち上がりは全然早いですね。
WPFのデザイナが立ち上がるのはいつも通り時間がかかってる感じですが・・・
動作自体はキビキビしていて悪くないです。
パフォーマンスチームぐっじょぶ!

今回のベータ版も日本語版が計画されてるということなので、一ヶ月ぐらいしたらリリースされるのかな?

Grid.IsSharedSizeScopeという機能。

WPFのGridのイチ機能で、複数のColumnDefinition/RowDefinition間でサイズを共有出来る。

具体的には同じ名前(SharedSizeGroup)のついたxxxDefinition間で一番サイズが大きいものに揃うみたい。
このとき、Column/Rowのサイズはauto固定で特定のサイズStar(*)は使えない。
また、使うには複数のGridの上の階層(親以上の要素)にGrid.IsSharedSizeScope=Trueを設定する必要がある。



	
		
			
			
		
		


↓実行結果
20091009-shared_size_grid.png
複数のGridとというか複数のColumnDefinitionでのサイズ共有。
長い方にサイズが合わせられてます。
こういうのはダイアログのOKキャンセルボタンの配置に良いかも?

Gridとか基本中の基本と思って使ってたけど、まだまだ知らないことあるなぁ・・・。

«Prev || 1 · 2 · 3 · 4 · 5 · 6 · 7 · 8 · | Next»

HTML creation time [0.42sec.]
"intre." by MinagiSyu, sense 1999.11.23.
Powered by Nucleus CMS v3.41

Utilities

タグ
C# | サッカー | ツクールもどき | Windows 7 | ツール | SAP1x | .NET | SAPFx | PCパーツ | 園芸 | ...すべてのタグ
カレンダー
<   2010-09   >
日月火水木金土
   1234
567891011
12131415161718
19202122232425
2627282930  
最近の更新
    2010-08-31
  • [日記] SAPFx 3.1.0.7。
  • [更新履歴] SmartAudioPlayer Fx 3.1.0.7 リリース。
  • 2010-07-30
  • [日記] 久々のSAPFxリリース。
  • [更新履歴] SmartAudioPlayer Fx 3.1.0.6 をリリース。
  • [ダウンロード] SmartAudioPlayer Fx
  • 2010-07-11
  • [日記] WebMatrixが本気過ぎる件。
  • 2010-06-23
  • [日記] Google Reader APIの認証がまた変わった?
Adsense