2012-12-02 13 views

Odpowiedz

4

Oto rozwiązanie używam:

public class Clip 
{ 
    public static bool GetToBounds(DependencyObject depObj) 
    { 
     return (bool)depObj.GetValue(ToBoundsProperty); 
    } 

    public static void SetToBounds(DependencyObject depObj, bool clipToBounds) 
    { 
     depObj.SetValue(ToBoundsProperty, clipToBounds); 
    } 

    /// <summary> 
    /// Identifies the ToBounds Dependency Property. 
    /// <summary> 
    public static readonly DependencyProperty ToBoundsProperty = 
     DependencyProperty.RegisterAttached("ToBounds", typeof(bool), 
     typeof(Clip), new PropertyMetadata(false, OnToBoundsPropertyChanged)); 

    private static void OnToBoundsPropertyChanged(DependencyObject d, 
     DependencyPropertyChangedEventArgs e) 
    { 
     FrameworkElement fe = d as FrameworkElement; 
     if (fe != null) 
     { 
      ClipToBounds(fe); 

      // whenever the element which this property is attached to is loaded 
      // or re-sizes, we need to update its clipping geometry 
      fe.Loaded += new RoutedEventHandler(fe_Loaded); 
      fe.SizeChanged += new SizeChangedEventHandler(fe_SizeChanged); 
     } 
    } 

    /// <summary> 
    /// Creates a rectangular clipping geometry which matches the geometry of the 
    /// passed element 
    /// </summary> 
    private static void ClipToBounds(FrameworkElement fe) 
    { 
     if (GetToBounds(fe)) 
     { 
      fe.Clip = new RectangleGeometry() 
      { 
       Rect = new Rect(0, 0, fe.ActualWidth, fe.ActualHeight) 
      }; 
     } 
     else 
     { 
      fe.Clip = null; 
     } 
    } 

    static void fe_SizeChanged(object sender, SizeChangedEventArgs e) 
    { 
     ClipToBounds(sender as FrameworkElement); 
    } 

    static void fe_Loaded(object sender, RoutedEventArgs e) 
    { 
     ClipToBounds(sender as FrameworkElement); 
    } 
} 

Znaleziona here

1

Wolę 'Klip' własność Oto niektóre XAML

<Grid Width="100" Height="50"> 
    <Grid.Clip> 
     <RectangleGeometry Rect="0 0 100 50"/> 
    </Grid.Clip> 
</Grid> 

Parametr o 'Rect' właściwość: Rect = "xy szerokość wysokość"

Mam nadzieję, że pomaga

życzenia

2

to realizowane w WinRTXamlToolkit (https://github.com/xyzzer/WinRTXamlToolkit), który jest także dostępny w pakiecie Nuget.

Dodaj do nagłówka XAML:

xmlns:extensions="using:WinRTXamlToolkit.Controls.Extensions" 

Następnie, na przykład w składniku XAML Canvas

<Canvas extensions:FrameworkElementExtensions.ClipToBounds="True"/>