1

キャンバス内に角が丸い境界線があり、キャンバスにクリッピング領域を追加して、追加したものが境界内の領域にクリップされるようにしたいと考えています。キャンバスの Clip プロパティを設定できることはわかっていますが、キャンバスとオブジェクトは XAML でサイズが割り当てられるのではなく動的にサイズ変更されるため、使用するパスを計算する方法がわかりません。UIElement (この場合は境界線) から PathGeometry を派生させる方法はありますか? そうでない場合、これにアプローチする最良の方法は何ですか? これは、私が使用しているテスト ページの XAML です。

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

4

3 に答える 3

1

ActualHeightおよびActualWidthプロパティを使用してみてください

var height = TimelineCanvas.ActualHeight;
var width = TimelineCanvas.ActualWidth;
于 2009-03-26T16:34:49.117 に答える