2011-09-16 9 views
1

私はテキストボックスと長方形を持っています。テキストボックスの内容が変更されると、四角形が自動的に更新されます。私は視覚的なブラシで矩形塗りつぶしを描いています。問題は、ビジュアルブラシがテキストボックスの実際の外観と一致しないことです。私は何をすべきか。ここに私のコードだ: enter image description hereビジュアルブラシ奇妙な振る舞い

+0

正確に何が得られているか(表示と画像が最高になるような)いくつかの情報を提供する必要があります。 –

+0

あなたのコードを空のウィンドウにドロップするだけで、私が知る限り問題は再現されません。 –

+0

@Meleak私は、実行時にテキストボックスの内容を変更して、それを変更しようとすると問題だと思っています。 – Cobold

答えて

3

がオンに基づいて、あなたのXAMLに小さな変更を加えた:

<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <TextBox Name="txtBox"/> 

     <Rectangle Height="{Binding ElementName=txtBox, Path=ActualHeight}" 
        Width="{Binding ElementName=txtBox, Path=ActualWidth}"> 
      <Rectangle.Fill> 
       <VisualBrush Visual="{Binding ElementName=txtBox}"/> 
      <Rectangle.Fill> 
      <Rectangle.LayoutTransform> 
       <ScaleTransform ScaleY="-0.75"/> 
      </Rectangle.LayoutTransform> 
     </Rectangle> 
    </StackPanel> 

ここで私は、いくつかの文字を削除し、私が得たものを見て、その後、

enter image description here を「ビジュアルブラシ」を書きましたあなたのコメントの情報。問題は、TextBlockBackgroundを持っていないので、VisualBrushがレンダリングのためにTextBlockの可視部分を見つけて、それをBindingsに基づいてTextBlockの全長に伸ばしていると思います。 TextBlockBackground="Transparent"を持っていますが、それは

を更新せずに、あなたの問題を再現するとき

次のXAMLは、正常に動作します:をチャットでは、OPは、バインディング Widthが文字を削除するときに縮小するから TextBoxを保ったことがわかりました。したがって、 Widthバインディングを削除すると、センタリングの問題も修正されます。

<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> 
    <TextBox Name="txtBox"/> 
    <TextBlock Name="textBlock" Text="{Binding ElementName=txtBox, Path=Text}" 
       Background="Transparent"/> 
    <Rectangle Height="{Binding ElementName=textBlock, Path=ActualHeight}"> 
     <Rectangle.Fill> 
      <VisualBrush Visual="{Binding ElementName=textBlock}"/> 
     </Rectangle.Fill> 
     <Rectangle.LayoutTransform> 
      <ScaleTransform ScaleY="5"/> 
     </Rectangle.LayoutTransform> 
    </Rectangle> 
</StackPanel>