2011-01-10 35 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

テキストボックスを再テンプレートすることによって、キャレットの色を変更する方法があります。キャレットは、白と白の色を変更するのではなく、背景色と背景色のXOR値の間の色を変更することによって点滅します(詳細情報の段落の最初の段落hereでは、どのウィンドウがキャレットを点滅させるかがよく分かります)。これはネイティブのテキストボックスに適用され、ルックアンドフィールを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は、スクリーンとXORで挿入ポイントの値を計算します。私は反対の私のコメントを削除しました。 +1 –

+0

そのリンクが何を指していたのでしょうか? – Chris

0

もう1つの方法は、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. */} 
} 

受け入れ答えは私のために働いていなかったと私は理由を把握するための時間/専門知識が不足しているが、これは正常に動作しています。

関連する問題