2009-03-26 5 views
1

Ich habe einen Rahmen mit abgerundeten Ecken innerhalb einer Leinwand und möchte einen Ausschnittbereich zur Leinwand hinzufügen, so dass alles, was ich hinzufüge, an die Region innerhalb der Grenze abgeschnitten wird. Ich weiß, dass ich die Clip-Eigenschaft der Zeichenfläche festlegen kann, aber da die Zeichenfläche und das Objekt dynamisch skaliert werden und keine Größen im XAML zugewiesen sind, kann ich nicht herausfinden, wie der zu verwendende Pfad berechnet wird. Gibt es eine Möglichkeit, eine PathGeometry von einem UIElement (in diesem Fall die Grenze) abzuleiten? Wenn nicht, wie kann man das am besten angehen? Hier ist der XAML für die Testseite, mit der ich arbeite.Ermitteln Sie den Pfad dynamisch in 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> 

Antwort

1

Versuchen Sie, die ActualHeight und ActualWidth Eigenschaften

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

Ich hatte darüber nachgedacht, diese zu benutzen, aber ich fragte mich, ob es eine andere, schlauere Art geben könnte, dies zu tun. –

0

Ich landete mit diesem Code, würde aber immer noch in irgendwelchen alternativen Methoden interessiert.

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

Ich müsste diese Methode unterstützen; wenn auch nur, weil ich es Dutzende Male so gemacht habe, ohne einen schöneren Ansatz zu sehen. – MojoFilter

0

blacklight

Das Blacklight Toolpack Versuchen ein abgerundetes Ecke Abschneidewerkzeug hat und frei ist.

+0

Danke, ich werde es überprüfen. –

Verwandte Themen