2010-07-16 9 views
1

J'essaie de convertir mon application WPF en WPF UserControl. Dans l'application originale, j'avais volontairement modifié les marges de certains éléments afin que leurs bords ne soient pas dans les limites de la fenêtre. Je l'ai fait afin de cacher les frontières indésirables dont je ne pouvais pas me débarrasser sans avoir à écrire mon propre modèle de contrôle. C'était une solution simple, mais malheureusement, cette technique ne fonctionne pas lorsque mon application est transformée en UserControl. Si je place la largeur de mon UserControl à la même largeur que la fenêtre dans mon application d'origine, quand je regarde ce UserControl dans une application de test, les éléments dont les frontières je voulais cacher sont maintenant entièrement visibles.Comment puis-je empêcher les éléments WPF UserControl d'être visibles en dehors de la plage de vue souhaitée?

Cela n'a pas de sens pour moi pourquoi cela se produirait. Si je définis la largeur de UserControl à une certaine largeur, alors la largeur de UserControl doit être égale à WIDTH, n'est-ce pas? Eh bien, comme vous pouvez le voir ci-dessous dans l'image 1, tous les éléments de l'UserControl sont entièrement visibles, peu importe ce que j'ai défini WIDTH. Le visuel désiré (celui que j'avais l'habitude d'obtenir dans l'application originale) est montré dans l'image 2, où les éléments sont correctement coupés par les limites de la fenêtre.

My Problem http://img715.imageshack.us/img715/1807/probleme.png

Comment puis-je faire en sorte que des éléments avec des marges négatives afficheront la façon dont je les veux dans un UserControl? Toute aide pour accomplir ceci serait grandement appréciée.

Merci beaucoup,

Dalal

Répondre

4

Avez-vous essayé de définir la propriété ClipToBounds sur vos éléments au sein de votre UserControl à True?

+0

ClipToBounds a fait l'affaire. Merci. – Dalal

0

À l'intérieur de votre contrôle utilisateur, définissez la propriété Clip du conteneur, par exemple Grid à la taille (largeur, hauteur) du contrôle utilisateur.

Par exemple,

<Window x:Class="TestClipping.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="Auto" Width="Auto"> 
    <Grid SizeChanged="OnGridSizeChanged" 
      x:Name="myGrid"> 

    </Grid> 
</Window> 

et le gestionnaire d'événements:

private void OnGridSizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    // Set the clipping region to match the current display region of the grid. 
    var visibleArea = new RectangleGeometry(); 
    visibleArea.Rect = new Rect(0, 0, 
    myGrid.ActualWidth, myGrid.ActualHeight); 
    myGrid.Clip = visibleArea; 
}