C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: VB2008 WPF WindosFomsHostの使い方


(過去ログ 60 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■34409 / inTopicNo.1)  VB2008 WPF WindosFomsHostの使い方
  
□投稿者/ hs (1回)-(2009/03/28(Sat) 13:27:05)

分類:[VB.NET/VB2005 以降] 

現在、VS2008-VBでWPFのAPを開発しています。そこで色々と検索してみましたがどうしても解らないので今回質問させていただきました。

簡単にWindowのリザイズ(XAML)ができるのでWPFにこだわっているのですが、WPFではWindowコントロールが普通に使えないものがたくさんあります。
もちろんWindowコントロールを別に作成しWindosFormsHostを使ってホストするのは簡単にできました。
しかしこの方法ではホストされたWindowコントロールにはリザイズが有効になりませんでした。そこでVBで直接WindosFormsHostのChildにセットしてみたところ思うような動きができました。

コードは以下のとおりなのですが...

Imports System.Windows.Forms
Class Window1
 Private Sub Window1_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded

  Dim TrView As New TreeView 'ツリービューを生成

   '生成したTrViewのNodeを作成したコード記述
   'TrViewのプロパティの設定したコード記述
   Me.WindowsFormsHost.Child = Trview ’最後にTrViewをWindowsFormsHostにセット
 End Sub
End Class

以上です。この方法だとツリービュー自体の動きはリザイズされるようになり考えているとおりの動き(リサイズ)が実現しました。
しかし、Windowから見ればWindowsFormsHostはセットされたTrViewではなくWindowsFormsHostそのものです。
セットしたTrViewのイベントを記述したくてもやり方がわかりません。WindowsFormsHostをTrViewそのものとして扱えればイベントごとの記述が可能だと思うのですが、そんな事は可能なのでしょうか?
これは自分なりの解釈なので根本的に考え方が違うのであれば、それも一緒に教えていただきたいです。
また、ほかの方法などあれば教えてください。

引用返信 編集キー/
■34423 / inTopicNo.2)  Re[1]: VB2008 WPF WindosFomsHostの使い方
□投稿者/ biac (75回)-(2009/03/28(Sat) 22:31:43)
biac さんの Web サイト
> WindowsFormsHostをTrViewそのものとして扱えればイベントごとの記述が可能だと思うのですが、そんな事は可能なのでしょうか?

それはまずムリでしょう。

WPF のウィンドウの上に、 WindowsFormsHost の透明なウィンドウが乗っかり、 その WindowsFormsHost のウィンドウの上に TreeView が乗っているような状態です。
WinForm のウィンドウの上に、 ユーザーコントロールが乗っかり、 そのユーザーコントロールの上に TreeView が乗っているときに、 ユーザーコントロールを TreeView そのものとして扱えるでしょうか?

出来るとすれば、 WindowsFormsHost が TreeView のフリをする必要があります。
つまり、 WindowsFormsHost を拡張してやることになります。 実際には、 その親クラスの HwndHost を実装することになると思うのですが… 次のチュートリアルを読んでみてください。
http://msdn.microsoft.com/ja-jp/library/ms752055(loband).aspx
> チュートリアル : Windows Presentation Foundation アプリケーションでの単純な Win32 コントロールのホスト


引用返信 編集キー/
■34434 / inTopicNo.3)  Re[2]: VB2008 WPF WindosFomsHostの使い方
□投稿者/ hs (5回)-(2009/03/29(Sun) 12:55:54)
biacさん返信ありがとうございます。

biacさんから回答いただいた後、現在の設計のままでは開発中のデザインが出来ないさそうな状況なんだと、結構凹んでいました。
今朝ほかの方法をと考え本屋さんに行ってきました。
するととても私の考えていた事がとても簡単な方法で紹介されていてびっくりしているところです!

まず、WindowにWindowsFormsHostを配置、次に、Windows.Formを参照、次にXAMLのタグのChild部分に直接TreeViewを書き込みます。
そしてChildにセットしたTreeViewに対して指定したイベント名(クラス名も)をタグ内に書き込みます。
最後に指定した イベント名(クラス名)をWindowのVBに記述します。

記述は次のとおりです。
<Window>タグ内に
xmlns="wf:clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"を追加 '※Windows.Formsの参照

それを行うとWinコントロールをタグに記述出来るようになるのでセットした<wf:WindowsFormsHost>タグ内のChild部分に
<wf:TreeView>を追加、ここまでが方法は違えど私自身が実現できていたところです。
そこで今回の質問内容ですが、このChild部分のコントロールのイベントをTreeViewその物として扱いイベント内容を記述できないかという事でした。
追加した<wf:TreeView>内にTreeViewが持っているイベントを記述できるのです。これによりWindow自身がどのイベントかを認識できるようになると言うのです。記述は以下の通りです。
<wf:TreeView Name="Tree" AfterSelect="Tree_AfterSelect"> を追加しWindow側のVBに指定したTree_AfterSelect を記述したところみごとに!Tree_AfterSelectを認識し実行してくれました。
(もちろん<wf:TreeView>内ではコントロールの名前"Tree"とイベント名<"'Tree'_AfterSelect">の"Tree"の統一は必須です。)
以上です。
オブジェクト指向の概念が私の頭がよく認識しておらず原始的な方法なのかもしれませんが、とりあえず思っていたことが出来ました。biacさんありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -