何が最良の方法を実施するUI状態ですね。
-
23-08-2019 - |
質問
私のプログラムしていくつUI国通常、成功し、エラー)をそれぞれ一つのコンポーネントスイート可視-隠れた有効/無効の色が変化する、ラベルと言うもの。私のコードの後ろについては基本的にいたいと言うことができるでしChangeWindowState(ポートします。通常の);
その後、私の質問は、どのようベストを実施する制御変化するのでしょうか。
もちろん私も手動でコントロールコードの後ろが、だん、ありがとうございますのでよりよい方法を用コンポーネントのラインナップのテーマやスタイル。これだけでもかをセットするだけで、実際のウィンドウの"エラー"をテーマに、事前定義されています。思った瞬間にい場合に用語の間違いになればと思い誰かが私の方向に向かうようなものです。
よろしく!
解決
もちろん、これにアプローチする多くの方法があります。あなたがプログラム状態「オブジェクト・モデル」を持っていた場合は、DataTemplatesとDataTriggersのいくつかの組み合わせを使用することができます。これがそうでないと仮定すると、ここでは別のアプローチがあります:あなたは、ウィンドウと呼ばれるので、あなたはこのようなあなたのウィンドウクラスの「依存関係プロパティ」を定義するとします:
public partial class Window1 : Window
{
public Window1()
{
this.InitializeComponent();
// Insert code required on object creation below this point.
}
public ProgramStatus ProgramStatus
{
get { return (ProgramStatus)GetValue(ProgramStatusProperty); }
set { SetValue(ProgramStatusProperty, value); }
}
// Using a DependencyProperty as the backing store for ProgramStatus. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ProgramStatusProperty =
DependencyProperty.Register("ProgramStatus", typeof(ProgramStatus), typeof(Window1), new UIPropertyMetadata(null));
}
public enum ProgramStatus
{
Normal,
Success,
Error
}
これは、直接結合またはトリガのいずれかによって、かなりの(ウィンドウ自体を含む)、ウィンドウの任意の要素の任意のプロパティを変更することができます。ここでは、プロパティトリガーを経由して、ウィンドウの背景色を変更する例を示します。
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:l="clr-namespace:Test"
x:Class="Test.Window1"
x:Name="Window"
Title="Window1"
Width="640" Height="480">
<Window.Style>
<Style TargetType="{x:Type l:Window1}">
<Style.Triggers>
<Trigger Property="ProgramStatus">
<Trigger.Value>
<l:ProgramStatus>Error</l:ProgramStatus>
</Trigger.Value>
<Setter Property="Background" Value="Red" />
</Trigger>
<Trigger Property="ProgramStatus">
<Trigger.Value>
<l:ProgramStatus>Normal</l:ProgramStatus>
</Trigger.Value>
<Setter Property="Background" Value="Blue" />
</Trigger>
<Trigger Property="ProgramStatus">
<Trigger.Value>
<l:ProgramStatus>Success</l:ProgramStatus>
</Trigger.Value>
<Setter Property="Background" Value="Green" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Style>
<Grid x:Name="LayoutRoot"/>
</Window>
他のヒント
別のオプションくるみのVisualStateManager発売したとしてWPFToolkit.
詳細情報はこのようなリンク:
- VSM概要:http://windowsclient.net/wpf/wpf35/wpf-35sp1-toolkit-visual-state-manager-overview.aspx
- WPFToolkitにCodePlex:http://www.codeplex.com/wpf
テレビでも展開しております。
は、この種のもののために私はかなり常に「のupdateUI()」関数を行ってきました。この関数は、モデル/メンバプロパティ/状態の状態を見て、許可/禁止、隠し/ショー、何でも。アウトこのコードを広めるためにしようと常に(そう「ChangeWindowsState(..)は、」実際にはプロパティを設定し、「のupdateUI()」を呼び出します)問題につながるます。
私は一般的な方法でこれを処理するためにいくつかの試みを見てきました...しかし、どれも私は本当に(例えば、WTLのもののために)言っていないという。一般的にこれらはひどく実装されていません...しかし、ただ簡単にはすぐに彼らが何ができるかを超過します。そして、一般的に状態論理は、IF / THEN / ELSEスタイルのロジックは、以下の混乱(メンテナンス、デバッグなど)につながる場合には、明示的にシンプルでコード化されたことを十分に重要である。