물론 이러한 접근 방법에는 여러 가지가 있습니다. 프로그램 상태의 "객체 모델"이 있다면 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>