에 적용 할 수있는 Brushes.Green
값이, 당신이 이런 식으로 뭔가를 찾고 생각 :
Style style = new Style();
style.TargetType = typeof(Button);
MultiDataTrigger trigger = new MultiDataTrigger();
Condition condition1 = new Condition();
condition1.Binding = new Binding() { Path = new PropertyPath("Content"), RelativeSource = RelativeSource.Self };
condition1.Value = "OK";
Condition condition2 = new Condition();
condition2.Binding = new Binding(){Path = new PropertyPath("IsMouseOver"), RelativeSource = RelativeSource.Self};
condition2.Value = true;
Setter setter = new Setter();
setter.Property = Button.ForegroundProperty;
setter.Value = Brushes.Green;
trigger.Conditions.Add(condition1);
trigger.Conditions.Add(condition2);
trigger.Setters.Add(setter);
style.Triggers.Clear();
style.Triggers.Add(trigger);
this.Style = style;
두 가지 조건이 충족 될 때 버튼의
Foreground
색이 녹색으로 발생합니다
:
1 일 - Button.Content
은 "OK"
= 2 - 마우스가 Button
이상이다. 다음 XAML로 표현 될 수
: WPF의 UI 요소에서 상속 시각적 스타일 또는 시각적 행동을 설정하는 단순한 사용자 버튼을 생성 할 필요없이 어떠한
<Button Content="OK">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Content, RelativeSource={RelativeSource Self}}" Value="OK"/>
<Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Foreground" Value="Green"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
.
WPF UI 요소를 서브 클래 싱하면 유지 관리가 줄어들고 완전히 불필요하기 때문에 사용하지 않는 것이 좋습니다. WPF UI 모델은 Lookless 컨트롤을 기반으로합니다. 즉, 컨트롤 시각적 모양은 해당 기능과 완전히 별개이며 독립적입니다. 일반적으로 WPF UI 요소의 하위 클래스는 의 새 기능을 정의하는 것입니다. 모양을 변경하는 대신 WPF의 기본 제공 메커니즘 인 Styles and Templates을 통해 수행 할 수 있습니다.
winforms 방식과 달리 WPF에서 적절한 WPF 방식을 사용하는 것이 좋습니다. 위의 코드는 C# 코드로 절차 적으로 객체 그래프를 만드는 것이 얼마나 복잡하고 번거로운지를 보여줍니다. XAML에서는 더 간단하고 훨씬 더 깨끗합니다. "condition1
, condition2
"등 불필요한 상용구가 없기 때문입니다.
개발자가 XAML에 익숙하지 않은 경우 웹에 수많은 XAML 자습서가 있으며 악의적으로 MSDN에이 주제에 대한 포괄적 인 설명서가 있습니다.
아래로 가면 WPF Visual Tree의 복잡성과 UI Virtualization과 같은 개념으로 인해 절차적인 방식으로 UI에서 작동하기가 어렵다는 현재 접근 방식에 중대한 문제가 있습니다.
MVVM 접근법과 적절한 DataBinding을 WPF의 전통적인 winforms 방식과 반대 (다시)하는 것이 좋습니다.
여기서도 WPF에 접근하는 것은 고통, 고문 및 실패, 그리고 예기치 않은 모든 종류의 오류가 발생하기 쉬운 엄청난 양의 완전히 불필요하고 유지 보수가 불가능한 확장 불가능한 코드 만 가져올 것이라고 강조 할 수 없습니다. 쉽게 해결할 수없는 코드
대부분의 개발자는 xaml 구성에 익숙하지 않지만 OOP 지향적 인 사람은 매우 강력합니다. 코드를 사용하면 개발 및 유지 보수 시간을 절약 할 수 있습니다. 나는 당신이 xaml에 대해 매우 열정적이라고 이해하고 대부분의 사람들은 사용자 정의 제어 styiling을 위해 이것을 사용합니다. 우리는 예외라고 생각합니다. 최선의 선택이며 clr이 그렇게 할 수 있습니다. 나는 여기에없는 "길"에 대한 또 다른 주제를 행복하게 만들 수 있습니다. – RollRoll
죄송합니다. XAML을 모르거나 배울 수 없으면 winforms로 돌아가십시오. [** WPF Mentality **] (http://stackoverflow.com/a/15684569/643085)는 winforms 접근 방식과 완전히 다르며 WPF는 이러한 방식으로 사용되지 않습니다. 앞으로이 결정을 후회하게 될 것입니다. winforms 방식으로 WPF를 사용하는 것은 누구에게나 ** 최선의 선택입니다 **. –
BTW, "XAML 구성"같은 것은 없습니다. XAML의 선언적 특성을 완전히 오해하는 것 같습니다. 그것은 "설정"이 아니며 여기에 게시 한 무시 무시한 코드보다 훨씬 더 깨끗한 방식으로 그래프를 선언하고 객체화 할 수있는 선언적 언어입니다. –