2011-01-10 4 views
4

TextBox의 전경 및 배경을 설정하면 깜박이는 커서의 색이 자동으로 설정됩니다. 아래 코드는 흰색 커서를 보여줍니다.편집 가능한 ComboBox에서 깜박이는 커서의 색 설정

<TextBox Background="Black" Foreground="White">Test</TextBox> 

커서 색상이 설정되지 않은 편집 가능한 ComboBox를 위해 같은 일을하고. 아래의 코드는 검은 색 (이 경우 보이지 않는) 커서를 보여줍니다.

<ComboBox Background="Black" Foreground="White" IsEditable="True"> 
    <ComboBoxItem>Test1</ComboBoxItem> 
    <ComboBoxItem>Test2</ComboBoxItem> 
</ComboBox> 

그럼 어떻게 콤보 상자의 깜박이는 커서 색을 설정합니까?

답변

6

텍스트 상자를 retemplating하여 캐럿의 색상을 변경하는 방법이 있습니다. 캐럿은 검정색과 흰색 사이의 색을 변경하지 않고 배경색과 배경색의 XOR 값 사이의 색을 변경하여 나타납니다. 추가 정보 섹션의 첫 번째 단락 here은 캐럿을 깜박이는 데있어 어떤 창을 더 잘 설명합니다. 이것은 기본 텍스트 상자에 적용되며 look'n'feel을 Windows 표준과 일관되게 유지하기 위해 모든 "사용자 정의"작성된 캐럿에 적용해야합니다. WPF를 들어

하나는 캐럿의 색상 변화시킬 수있는 작은 해결 방법은 : 당신은 배경 색상 (노란색)를 설정 이런 식으로

<TextBox Background="Yellow"> 
    <TextBox.Template> 
     <ControlTemplate TargetType="{x:Type TextBox}"> 
      <Border x:Name="Border"> 
       <ScrollViewer Margin="0" x:Name="PART_ContentHost" Style="{DynamicResource SimpleTextScrollViewer}" /> 
      </Border> 
     </ControlTemplate> 
    </TextBox.Template> 
</TextBox> 

를, 캐럿이 색상과 사이에 깜박 XOR 노란색 (파란색)이지만 노란색 배경은 렌더링되지 않습니다 (템플릿이 배경색을 신경 쓰지 않기 때문에). 위 코드는 일반적인 텍스트 상자의 모든 비주얼을 포함하지는 않지만, 쉽게 추가 할 수 있다는 것을 보여주는 예입니다.

+0

매혹적인 KB 링크. Windows는 화면을 XORing하여 삽입 점의 값을 계산합니다. 나는 반대 의견을 삭제했다. +1 –

+0

그 링크가 가리키는 데 사용 된 아이디어가 있습니까? – Chris

0

또 다른 옵션은 TextBox에서 동일한 바인딩을 사용하는 것입니다.

public override void OnApplyTemplate() 
{ 
    try 
    { 
     base.OnApplyTemplate(); 
     myCombo.ApplyTemplate(); 
     TextBox tb = myCombo.Template.FindName("PART_EditableTextBox", myCombo) as TextBox; 
     if (tb != null) 
     { 
      tb.SetBinding(TextBox.BackgroundProperty, myCombo.GetBindingExpression(ComboBox.BackgroundProperty).ParentBindingBase); 
     } 
     else 
     { 
      /* etc. */ 
     } 
    } 
    catch (Exception) { /* etc. */} 
} 

허용되는 대답이 저에게 효과적이지 않으며 시간/전문 지식 부족으로 이유를 파악하지 못했지만 정상적으로 작동합니다.

관련 문제