2009-03-26 8 views
1

キャンバス内に丸い角を持つ境界線があり、追加するものが境界内の領域にクリップされるようにキャンバスにクリッピング領域を追加したいとします。私はキャンバスのClipプロパティを設定できることを知っていますが、キャンバスとオブジェクトはXAMLで割り当てられるサイズよりも動的にサイズが変更されるため、使用するパスを計算する方法を理解できません。 UIElement(ここでは境界線)からPathGeometryを派生させる方法はありますか?これに接近する最善の方法は何ですか?ここでは、私が使っているテストページのXAMLを紹介します。Silverlight 2で動的にパスを決定する

<UserControl x:Class="TimelinePrototype.Page" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
<Grid x:Name="LayoutRoot"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="auto" /> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 
    <StackPanel Orientation="Horizontal" Margin="10"> 
     <Button x:Name="cmdDraw" FontSize="18" Click="cmdDraw_Click" Content="Draw" Margin="0,0,5,0" VerticalAlignment="Bottom" /> 
     <TextBlock x:Name="txtDateRange" FontSize="18" Margin="10,0,10,10" VerticalAlignment="Bottom" /> 
    </StackPanel> 
    <Canvas x:Name="TimelineCanvas" Grid.Row="1" HorizontalAlignment="Stretch" 
       SizeChanged="TimelineCanvas_SizeChanged"> 
     <Border x:Name="TimelineBorder" 
       Background="LightGray" 
       BorderBrush="Black" 
       BorderThickness="2" 
       CornerRadius="15" 
       Margin="10" 
       Grid.Row="1" 
       VerticalAlignment="Top"> 
     </Border> 
    </Canvas> 
</Grid> 

答えて

1

ActualHeightActualWidthプロパティ

var height = TimelineCanvas.ActualHeight; 
var width = TimelineCanvas.ActualWidth; 
+0

私はそれらを使用することを考えていましたが、これを行うための他のより巧妙な方法があるかどうか疑問に思っていました。 –

0

を使用してみてください、私はこのコードを使用して終了し、まだ任意の別の方法に興味があると思います。

RectangleGeometry clipRect = new RectangleGeometry(); 
clipRect.Rect = new Rect(TimelineBorder.Margin.Left, TimelineBorder.Margin.Top, TimelineCanvas.ActualWidth - (TimelineBorder.Margin.Left + TimelineBorder.Margin.Right), TimelineCanvas.ActualHeight - (TimelineBorder.Margin.Top + TimelineBorder.Margin.Bottom)); 
clipRect.RadiusX = TimelineBorder.CornerRadius.TopLeft; 
clipRect.RadiusY = TimelineBorder.CornerRadius.TopLeft; 
TimelineCanvas.Clip = clipRect; 
+0

私はその方法を推奨する必要があります。それはもっと良いアプローチを見ずに何十回もそれをやったからです。 – MojoFilter

0

ブラックライトTOOLPACKは、丸みを帯びたコーナークリッピングツールを持っており、無料でblacklight

を試してみてください。

+0

ありがとう、私はそれをチェックアウトします。 –

関連する問題