Silverlight Clipping Fun

While Silverlight animation performance may be better than WPF, its support for clipping is definitely inferior.

First off, there is no ClipToBounds property. If you want your canvas to clip its content, you need some extra code.

Then, it turns out that a TextBlock inside a canvas won’t clip itself. Basically, the “Width” property is ignored: the text will takScreen shote as much space as it sees fit. You can, however, tame a TextBlock by placing it inside a Border. This also gives a benefit of vertical alignment, that bare TextBlock cannot do.

Sample

Screenshot

The sample is generate by this code:

<Border Width="300" Height="300" BorderBrush="Blue" BorderThickness="1">
    <Canvas>
        <Border Width="50" BorderBrush="Black" BorderThickness="1" Canvas.Left="30" Canvas.Top="30">
            <TextBlock Text="This TextBLock is 50 pixels wide" />
        </Border>

        <Border Width="300" Height="100" BorderBrush="Brown" BorderThickness="1" Canvas.Left="30" Canvas.Top="80">
            <TextBlock Text="Centered text" HorizontalAlignment="Center" VerticalAlignment="Center" />
        </Border>
        
        <TextBlock Width="10" Text="This TextBlock is 10 pixels wide" Canvas.Left="150" Canvas.Top="250" />
    </Canvas>
</Border>

Leave a Reply

Your email address will not be published. Required fields are marked *