2013-07-08 8 views
2

WPF를 사용하고 있습니다. 코드에서 Foreground 관련 코멘트를보십시오. 텍스트 상자에 포커스가 있으면 글꼴이 흰색으로 변경되어야하지만 제대로 작동하지 않습니다. 왜?전경색은 controlTemplate에서 변경되지 않습니다.

<ControlTemplate TargetType="{x:Type TextBox}"> 
       <Border x:Name="bg" BorderBrush="#FFDCDCC9" Background="#FFDCDCC9" BorderThickness="1"> 
        <ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
       </Border> 
       <ControlTemplate.Triggers> 

        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="BorderBrush" TargetName="bg" Value="#FFEC94C0"/> 
         <Setter Property="Background" TargetName="bg" Value="#FFEC94C0"/> 
         <Setter Property="BorderThickness" TargetName="bg" Value="2"/> 
         <Setter Property="Cursor" Value="Hand"/> 
        </Trigger> 

        <Trigger Property="IsFocused" Value="True" > 
         <Setter Property="BorderBrush" TargetName="bg" Value="#FFB5266E"/> 
         <Setter Property="Background" TargetName="bg" Value="#FFEC94C0"/> 
         <!-- foreground is invalid --> 
         <Setter Property="Foreground" TargetName="bg" Value="white"/> 
         <Setter Property="BorderThickness" TargetName="bg" Value="2"/> 
         <Setter Property="Cursor" Value="Hand"/> 
        </Trigger> 

       </ControlTemplate.Triggers> 
      </ControlTemplate> 
+0

IsMocusOver 트리거가 IsFocused 트리거보다 우선 적용됩니까? –

+0

TargetName = "bg"는 Border 요소를 대상으로합니다. TargetName = "bg"지정을 제거하면 어떻게됩니까? –

+0

@Evanlewis 예 올바른 – user1358072

답변

2

테두리에는 전경이 없습니다. 방정식에서 TargetName을 제거하십시오 ... 나는 그것이 작동 할 것이라고 믿습니다. 그것은 아래처럼 보일 것입니다 (또한 이것이 리소스가 필요한 경우 키가 필요할 것입니다). 이것은 내 일을 잘 처리했다.

<ControlTemplate x:Key="a" TargetType="{x:Type TextBox}"> 
     <Border x:Name="bg" BorderBrush="#FFDCDCC9" Background="#FFDCDCC9" BorderThickness="1"> 
      <ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
     </Border> 
     <ControlTemplate.Triggers> 

      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="BorderBrush" TargetName="bg" Value="#FFEC94C0"/> 
       <Setter Property="Background" TargetName="bg" Value="#FFEC94C0"/> 
       <Setter Property="BorderThickness" TargetName="bg" Value="2"/> 
       <Setter Property="Cursor" Value="Hand"/> 
      </Trigger> 

      <Trigger Property="IsFocused" Value="True" > 
       <Setter Property="BorderBrush" TargetName="bg" Value="#FFB5266E"/> 
       <Setter Property="Background" TargetName="bg" Value="#FFEC94C0"/> 
       <!-- foreground is invalid --> 
       <Setter Property="Foreground" Value="white"/> 
       <Setter Property="BorderThickness" TargetName="bg" Value="2"/> 
       <Setter Property="Cursor" Value="Hand"/> 
      </Trigger> 

     </ControlTemplate.Triggers> 
    </ControlTemplate> 
+0

내 코드와 코드가 동일하게 보입니다.> – user1358072

+0

6 번째 줄이 맨 아래부터 보지 않습니다. 대상 이름은 remove입니다 ... x : 테두리 이름을 제거하지 마십시오. Setter 항목에서 TargetName을 제거하면 XAML에서 TextBox 인 컨트롤 자체를 봅니다. 텍스트 상자에는 전경 속성이 있습니다. 테두리가 – DaClan

+0

이 아니라면 "마우스를 올려 놓고 IsFocused가 서로 간섭하는 문제가 발생하면 멀티 트리거를 설정할 수 있습니다. 텍스트 상자에 포커스가있을 때 마우스 오버가 없으면 간섭이 발생하지 않습니다. 그러나 MouseOver + Focus setter 및 MouseOver + 멀티 트리거를 통한 고정 초점 설정자 – DaClan