2016-03-31 15 views
1

私はこのoutlined textBlockを使用しています.Javier G.が提案した解決策では魅力的です。私はそれを図書館に入れたので、今度はHelperLib:OutlinedTextBlockです。
これをTextBoxに入れたいと思います。TextBoxにアウトラインのtextBlock(または他のコントロール)を配置する方法

それでは、私が試したことはある:

  • はのTextBlockの子としてOutlinedTextBoxを置くが、それは子供としてそれを受け入れていないので、それは動作しませんでした。
  • リッチテキストボックスを使用してFlowDocument内に置くが、得たランタイムエラー
    • はテンプレートが、再び実行時エラーを使用しているので、何かが間違っていました。

outlinedTextBoxを置くの事実は、私はこれがテキストボックス内の他の任意コントロールを置くよう再考することができると思い、それはあまりにも独特行った場合。私は私のコントロールを命名した otbQueryそれは表示されません。

あり、私が遭遇したことがないadditiona問題がある --EDIT-- ...私は解決策が近くにあると思いますが、何とかそれはまだ私をエスケープコードの上に!なぜ???

<TextBox Name="tbxQuery" VerticalAlignment="Center" Grid.Column="3" Width="200" Background="Transparent" CaretBrush="White" HorizontalAlignment="Center" Foreground="White" TextChanged="TextBox_TextChanged" BorderBrush="Gainsboro" BorderThickness="3"> 
    <TextBox.Template> 
     <ControlTemplate> 
      <Border BorderBrush="Gainsboro" BorderThickness="3"> 
      <Grid> 
     -----> <HelperLib:OutlinedTextBlock Name="otbQuery" Margin="1" Fill ="White" Stroke="Red" Text="{Binding Path=Content, ElementName=cp, Mode=OneWay}" VerticalAlignment="Center"/> 
       <ContentPresenter x:Name="cp" Content="{Binding Text, RelativeSource={RelativeSource TemplatedParent}}" TextBlock.Foreground="Transparent"/> 
       </Grid> 
      </Border> 
     </ControlTemplate> 
    </TextBox.Template>    
</TextBox> 

あなたはここでエラーを見ることができますし、有効なクイックフィックスが

enter image description here

+0

Uh?解決策が投稿された理由は何ですか?それはうまくいっても、まだテストできませんでした:-o – Luca

+0

うまく表示され、ViewModelのデータをバインドできたとしても、実際にはTextBoxを入力できないため、削除しました。非常に便利なTextBoxではありません。 – Stewbob

+0

同じことをありがとうございます...他の解決策はありませんか?私はそれをバインドする必要はありませんが、はい私はそれを入力する必要があります.... – Luca

答えて

1

を提案されていないあなたはそれが起こるようにするためにTextBox制御のControlTemplateをオーバーライドする必要があります。以下は、それを行う方法の簡単な例ですが、TextBox.Textプロパティは、のTextプロパティにバインドされています。私はControlTemplate内標準TextBlockを入れている、カスタムTextBlock制御をかけることになり

 <TextBox> 
      <TextBox.Template> 
       <ControlTemplate> 
        <Border BorderBrush="Black" 
         BorderThickness="1"> 
         <Grid> 
          <TextBlock Margin="1" 
             Foreground="Red" 
             Text="{Binding Path=Content, ElementName=cp, Mode=OneWay}"/> 
          <ContentPresenter x:Name="cp" 
              Content="{Binding Text, RelativeSource={RelativeSource TemplatedParent}}" 
                   TextBlock.Foreground="Transparent"/> 
         </Grid> 
        </Border> 
       </ControlTemplate> 
      </TextBox.Template> 
     </TextBox> 

EDIT

上記の解決策は動作しますが、それは深刻なその場しのぎです。基本的には、TextBlockの上に透明なContentPresenterが置かれます。 TextBlockは、好きなようにテキストを表示し、ContentPresenterTextBoxと入力することができます。

まだ問題が残っているのは、クリックするか、TextBoxを入力するときにカーソルバーが表示されないということです。私はこの問題が、TextBoxのテンプレートに加えられたいくつかのスタイリングで克服できると思う。

+0

あなたのソリューションは素晴らしいです!そして、私はそれを解決した印をつけますが、あなたがさらなる努力をすることができればそれを感謝します。カーソルが表示されないという事実はまったく役に立たない。私はプログラムの無数の場所でそれを使用しなければならないし、私は自分自身で問題を解決することはできません。 ....ありがとう – Luca

+0

私の編集の高校2を参照してください – Luca

関連する問題