Class Window1 Dim change_title As Change_Title Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click change_title.Start() End Sub End Class
Class Change_Title Sub Start() Window1.Title = "テスト" End Sub End Class
こんにちは、おのでらです。
わざわざ別クラスに分ける必要はあるのでしょうか?(もしかして処理の都合上分ける必要があるとか?)
Class Window1
Dim change_title As Change_Title
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
Me.Title = "かわったよ!"
End Sub
End Class
おのでらです。
> 私が使用している参考書はFormで解説してあります。
> その参考書では、Window1クラス以外のクラスから直接ウィンドウのタイトルを変更できていました。
> その為、WPFでも同じように、window1クラス以外のクラスでも、直接ウィンドウタイトルを変更出来るのか?
> と思った次第です。
あーなるほど、理解できました。これは VB.NET 特有の「暗黙フォームインスタンス」でタイトル名を指定しているのですね。
VB.NET の Windows Form では可能なのですが、その他の言語、また Windows Form 以外のフレームワークでは
このような設定の仕方はできません。VB6 以前の機能の遺産として残っているものですね。
WPF は Windows Form とはアプリケーションのフレームワークとしては別物なので上記の方法は使えません。
別クラスでタイトルを設定するには Window クラスのインスタンスを別のクラスに渡してあげる必要があります。
Class Window1
Dim change_title As New Change_Title
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
change_title.Start(Me) ' Me で自分自身の Window のインスタンスを渡す
End Sub
End Class
Public Class Change_Title
Public Sub Start(ByVal window As Window)
window.Title = "別なタイトル"
End Sub
End Class
> ウィンドウに置いたコントロールの表示内容を変更したいとき等は、
> 基本的にwindow1クラスで.Contentなり.Textなりに値を代入していく方がよいのでしょうか?
> そして、その代入する値を計算する役割だけを他のクラスに持たせるといった方がよいのでしょうか?
先ほど示した方法で Window のインスタンスを別なクラスに渡して設定する方法もありますし、
Window1 クラス内で直接設定する方法もあります。
また WPF では MVVMパターン (Model-View-ViewModel デザイン パターン) と呼ばれる
デザイン パターンで UI のパラメータを更新する方法がよくつかわれます。
View のコントロールなどのパラメータへ直接コーディングせず、バインディングによって値の更新や受け渡しを実装します。
MVVMパターンについては公式サイトなどにも載っているので調べてみるといいでしょう。
・Model-View-ViewModel デザイン パターンによる WPF アプリケーション(http://msdn.microsoft.com/ja-jp/magazine/dd419663.aspx)
上記のリンク先はいきなり全てを理解するのは難しいと思いますので、他のサイトや書籍なんかで調べてみてください。
(ここなんか比較的小規模な実装パターンでしょうか)
http://shinshu.fm/MHz/88.44/archives/0000285284.html