开发者

Visual brush weird behavior

I have a textbox and a rectangle. The rectangle updates itself when textbox content changes. I'm painting the rectangle fill with visual brush. The problem is that the visual brush don't match the textbox's actual look. What should I do. Here's my code:

    <StackPanel HorizontalA开发者_如何学Clignment="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>

Here I wrote "Visual Brush",

Visual brush weird behavior

then deleted few chars and look what I got:

Visual brush weird behavior


Made a small change to your Xaml based on the information in your comment. The problem seems to be that the TextBlock doesn't have a Background so I guess that the VisualBrush just finds the visible part of the TextBlock for rendering and then stretches it to the full length of the TextBlock based on the Bindings.

The following Xaml works fine when the TextBlock has Background="Transparent" but reproduces your problem without it

Update: In the chat, the OP found that the Width Binding kept the TextBox from shrinking when deleting characters. So removing the Width binding fixes the centering issue as well.

<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>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜