イントレ。
Tag for "WPF"
以前チャレンジ失敗して放置してたんだけど、ズバリな回答案があった。
Highlight whole TreeViewItem line in WPF
Borderの中にGridを配置してGrid.Marginを調整することで子要素を段落下げしている。
TreeViewItemの親を辿ることで階層の深さを取得、Grid.Marginにコンバータ経由で渡している。
こんなシンプルな解決案があったなんて。・・・無念。
<追記>
・・・って思ったんだけど、DataTemplateと組み合わせると問題発生。
コンバータ経由で階層の深さを取得する際のタイミングの問題で、
TreeViewItem.Itemsに追加→スタイル設定となって欲しいんだけど逆になるっぽい。
TreeViewItem.Parentが変化したら再計算して適用すればいいのですが、
それを検知する方法がない・・・。
困った。
</追記>
そして、日記を更新する癖が完全に抜けてる件。
Highlight whole TreeViewItem line in WPF
Borderの中にGridを配置してGrid.Marginを調整することで子要素を段落下げしている。
TreeViewItemの親を辿ることで階層の深さを取得、Grid.Marginにコンバータ経由で渡している。
こんなシンプルな解決案があったなんて。・・・無念。
<追記>
・・・って思ったんだけど、DataTemplateと組み合わせると問題発生。
コンバータ経由で階層の深さを取得する際のタイミングの問題で、
TreeViewItem.Itemsに追加→スタイル設定となって欲しいんだけど逆になるっぽい。
TreeViewItem.Parentが変化したら再計算して適用すればいいのですが、
それを検知する方法がない・・・。
困った。
</追記>
そして、日記を更新する癖が完全に抜けてる件。
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の中身の構成が変わったら使うものにならなくなるわけだが。
↓
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の中身の構成が変わったら使うものにならなくなるわけだが。
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
なんか追いかけるのだけで疲れる・・・。
ScottGu's Blogより。
MSDNライブラリよりも詳細に書かれている気がする。
WPF RibbonはCTP扱いでcodeplexにて公開されたみたい。
コントロール群の説明に書かれてたWPF Bag O'Tricksって初めて聞いたけど、なかなか興味のそそるコントロール群が揃ってます。
コントロールじゃないけど、NotifyWorkerとか便利そう。
Bag-o-Tricks March '08 Edition
なんか追いかけるのだけで疲れる・・・。
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のデザイナが立ち上がるのはいつも通り時間がかかってる感じですが・・・
動作自体はキビキビしていて悪くないです。
パフォーマンスチームぐっじょぶ!
今回のベータ版も日本語版が計画されてるということなので、一ヶ月ぐらいしたらリリースされるのかな?
上記リンクからVisualStudio2010 Beta2の英語版がダウンロード出来るようです。
Expressも含めた全エディションが用意されてますね。
今回はエディションがExpress/Professional/Premium/Ultimateの4つになるみたいです。
StandardがProfessionalに吸収された形かな?
ぶっちゃけ、C#にメインならExpressで困ることはほとんど無いわけですが。
ちなみに、RTMが来年3月22日だそうです。
・・・と書いてある間にインストールが始まってました。
.NET Framework 4のインストールのために再起動要求されるのはBeta1と変わらずですね。
で。
早速起動してみてるんですが、Beta1と比べると立ち上がりは全然早いですね。
WPFのデザイナが立ち上がるのはいつも通り時間がかかってる感じですが・・・
動作自体はキビキビしていて悪くないです。
パフォーマンスチームぐっじょぶ!
今回のベータ版も日本語版が計画されてるということなので、一ヶ月ぐらいしたらリリースされるのかな?
WPFのGridのイチ機能で、複数のColumnDefinition/RowDefinition間でサイズを共有出来る。
具体的には同じ名前(SharedSizeGroup)のついたxxxDefinition間で一番サイズが大きいものに揃うみたい。
このとき、Column/Rowのサイズはauto固定で特定のサイズStar(*)は使えない。
また、使うには複数のGridの上の階層(親以上の要素)にGrid.IsSharedSizeScope=Trueを設定する必要がある。
↓実行結果

複数のGridとというか複数のColumnDefinitionでのサイズ共有。
長い方にサイズが合わせられてます。
こういうのはダイアログのOKキャンセルボタンの配置に良いかも?
Gridとか基本中の基本と思って使ってたけど、まだまだ知らないことあるなぁ・・・。
具体的には同じ名前(SharedSizeGroup)のついたxxxDefinition間で一番サイズが大きいものに揃うみたい。
このとき、Column/Rowのサイズはauto固定で特定のサイズStar(*)は使えない。
また、使うには複数のGridの上の階層(親以上の要素)にGrid.IsSharedSizeScope=Trueを設定する必要がある。
↓実行結果

複数のGridとというか複数のColumnDefinitionでのサイズ共有。
長い方にサイズが合わせられてます。
こういうのはダイアログのOKキャンセルボタンの配置に良いかも?
Gridとか基本中の基本と思って使ってたけど、まだまだ知らないことあるなぁ・・・。
Utilities
- タグ
- カレンダー
- 最近の更新
- Adsense