2012-02-21 7 views
2

텍스트 상자가 있습니다. 오류가 발생하면 borderbrush를 새 SolidColorBrush (Colors.Red)로 설정합니다. 오류가 고정되면, 나는 텍스트 상자의 테두리의 기본 색상으로 전환하고 싶습니다. xaml이 아닌 codebehind에서이 작업을 수행하고 있습니다.컨트롤 색상을 기본값으로 변경하십시오.

그러나 시스템에 따라 다릅니다.

SystemColor.ActiveControl 등을 사용하는 것으로 나타났습니다. 그렇다면 사용할 수있는 텍스트 상자의 기본 테두리는 무엇입니까?

나는 또한 작동하지 않은 Textbox.borderbrushproperty.defaultmetadata.defaultvalue와 같은 것이 있음을 발견했습니다.

기본 테두리 브러시로 전환하는 방법에 대한 아이디어가 있으십니까? 고맙습니다.

+1

킵 트랙. –

+0

WPF가 지원하는지 확실하지 않지만 Silverlight에는 오류가있는 속성에 바인딩 된 컨트롤 주위에 빨간색 상자가있는 IDataErrorInfo 인터페이스가 있습니다. 아마도 그것은 당신이하는 것보다 쉬울 것입니다. – cadrell0

답변

1

시작시 초기 값을 저장하고 사용하지 않는 이유는 무엇입니까? 시스템 색상을 사용할 수 있어야하지만 기본 색상을 변경 한 경우이 색상은 계속 작동합니다.

private Color _defBtnColor; 
public MyUserControl() 
{ 
    _defBtnColor = someButton.Foreground; 
} 

private void SetBackToDefault() 
{ 
    someButton.Foreground = _defBtnColor; 
} 
+0

나는 그 옵션을 알고 있지만, 응용 프로그램을 실행하는 동안 사용자가 테마를 전환하면 제대로 작동하지 않습니다. 나는 드문 경우이지만 깨끗한 해결책을 원한다는 것을 알고있다. –

+1

@VojtechRuzicka : 그것은 문제가되어서는 안된다. 기본적으로 시스템 색상은 동적입니다. 기본값을 변경했다면, 이유가있어 변경했는데, 여전히 작동합니다. 실제로 테스트 해 보셨습니까? 시스템 테마를 변경하면 작동하지 않습니까? –

0

시도 :

control.BackColor = Color.FromKnownColor(KnownColor.Window); 

자세한 내용은 Color.FromKnownColor on MSDN를 참조하십시오.

2

코드 숨김으로 처리해야합니까? 그렇지 않은 경우 Trigger을 사용하면 트리거 조건이 충족되는 동안 테두리 색상 만 변경됩니다.

<Style x:Key="MyTextBoxStyle" TargetType="{x:Type TextBox}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding ElementName=MyUserControl, Path=HasErrors}"> 
      <Setter Property="BorderBrush" Value="Red" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
+0

이것은 훨씬 더 간단하고 간단한 답변입니다. –

0

어쩌면 나는 파티에 좀 늦을 지 모르지만 색상을 시스템 기본 설정으로 변경하는 방법을 묻는 것 같습니까? 당신은 빨간색으로 색상을 변경하기 전에 기본 색상이 무엇인지의

someControl.BackColor = SystemColors.Control; 

또는

sslEditMode.BackColor = SystemColors.ButtonFace; 
관련 문제