通常、これを WPF で行うことはありません。
アプリケーション ロジックを UI 要素の状態に基づいて作成することは、実際には良い考えではありません。
なんで?UI はデータではないため、代わりにデータ項目の状態に基づいてアプリケーション ロジックを作成する必要があります。
これとこれを読むことをお勧めします
winforms を使用するのと同じ方法で WPF を使用しようとすることは、惨めな失敗と苦しみへのまっすぐな道です。
MVVM を採用し、DataBinding と、UI が常にアプリケーション ロジックおよびデータから分離されている必要があることを理解する必要があります。
編集:コード サンプルの追加 (C#)
ビューモデル:
public class MainViewModel
{
public string ButtonContent {get;set;} //TODO: Add Property Change Notification
public MainViewModel()
{
ButtonContent = "SomeButtonContent";
}
}
意見:
<Button Width="200" Height="30" Margin="5,5,5,5">
<TextBlock FontSize="14" Text="{Binding ButtonContent}"/>
</Button>
コードビハインド:
public class MainWindow: Window
{
public MainWindow()
{
InitializeComponent();
SomeModule.Instance = new MainViewModel();
DataContext = SomeModule.Instance;
}
}
モジュール (C# の静的クラス):
public static class SomeModule
{
public static MainViewModel Instance {get;set;}
public void DoSomething()
{
if (Instance.ButtonContent == "SomeButtonContent")
//...etc
}
}
これが、UI をデータから分離するという意味です。文字列を View ではなく ViewModel に配置し、それらの ViewModel プロパティの値を評価して、何をすべきかを決定します。
それでも、文字列の値に基づいてアプリケーション ロジックを作成することは、弱い解決策のように思えます。あなたは本当に何をする必要がありますか?これには列挙型を使用するなど、はるかに優れたアプローチがあります。
編集2:
ViewModel をバインドすることで、物事が「複雑」になることはありません。それは実際にそれらを大幅に簡素化します。
どのように?ControlTemplate
これは、単純なコントロールでこれを行っているためですが、その後、 内の UI 要素、またはさらに悪いことに同じことをしたいと思うようになり、DataTemplate
実際の問題が発生するのはそのときです。
したがって、より複雑な UI シナリオを扱う前に、"WPF のやり方" に慣れる必要があります。
最適でないアプローチ:
public class MainWindow: Window
{
public string ButtonContent
{
get
{
return this.txtButtonContent.Text;
}
set
{
this.txtButtonContent.Text = value;
}
}
}
<Button Width="200" Height="30" Margin="5,5,5,5">
<TextBlock x:Name="txtButtonContent" FontSize="14" Text="Connect"/>
</Button>
Button
クラスにはText
WPF のプロパティがないことを理解する必要があります。ほとんどの古いフレームワークとは対照的に、WPF には、Content Model
文字通り何にでも、ほとんどまたはまったく制限なしで何でも含めることができるという特徴があります。ButtonにText
プロパティを配置すると、Button に Text のみを含めるという制限が導入されますが、これは WPF には当てはまりません。
したがって、ここで実際に行う必要があるのは、のText
プロパティを変更することですTextBlock
(たまたまボタン内にありますが、実際にはビジュアル ツリーのどこにでもある可能性があります)。
そのため、データを保持するために ViewModel が実際に必要であるという事実に言及しました。たとえば、 内にある UI 要素にアクセスしDataTemplate
て操作する (簡単な) 方法がないためです。UI は常に、UI ではなく、Model クラスまたは ViewModel クラスに格納されているアプリケーションのデータの状態を反映している必要があります。