Meilleur auteur de réponses
ViewBox avec scaling sélectif.

Question
-
Bonjour,
Je travaille actuellement sur un projet WPF mettant en jeu une zone de travail où l'on peut dropper des objets et les redimensionner. J'utilise une ViewBox afin d'adapter la taille de la zone de travail ET des objets compris dans cette zone de travail (lors du redimensionnement de la fenêtre, mais aussi lors du changement d'image de fond de ma zone de travail).
Mon problème est que dans ma ViewBox, j'aimerai que mes objets se redimensionnent (chose faite), mais que les éléments graphiques de redimensionnement conservent une taille fixée sur les pixels de l'écran (valeur absolue).
Pour illustrer le problème : voici deux situations (1 et 2) représentant à gauche une fenêtre de petite taille et à droite lorsque la zone de travail (donc la ViewBox) occupe une grande surface (fenêtre en plein écran) : On voit bien sur la situation 1 (situation qui pose problème) que la taille de l’Ellipse permettant le redimensionnement de mes objets, change. Sur la situation 2, la taille est constante ce qui rend d’autant plus agréable le redimensionnement pour l’utilisateur.(image : xavier.malparty.fr/ViewBox.png )
Ma question est donc de savoir s’il est possible d’avoir des éléments contenus dans une viewbox qui font exception au scaling imposé par la viewbox, mais qui dont les coordonnées restent relatives à la ViewBox.
Sur d’autres forums, j’ai trouvé une éventuelle solution qui consisterait à remplacer ma viewBox par une grid et d’utiliser un converter pour adapter toutes les coordonnées et simuler le fonctionnement de la viewbox pour les paramètres qui en ont besoins. Mais je trouve cette solution assez fastidieuse à implémenter… Toute autre proposition est donc bienvenue !
Pour le code : voice l’implémentation de ma viewBox.
Code :Sélectionner tout - Visualiser dans une fenêtre à part
<Grid x:Name="dropZoneContainer" Background="{StaticResource DropZoneBackgroundBrush}" PreviewMouseDown="dropZoneContainer_PreviewMouseDown"> <!--Grid.Column="1"--> <Viewbox x:Name="viewBox" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ClipToBounds="False"> <!--Ce contrôle définit la zone maximale ou peuvent être déplacés les éléments.--> <controls:MovingThumContainerBound> <!--Deselect lorsque l'on ne clique pas sur un élément--> <!--<i:Interaction.Triggers> <i:EventTrigger EventName="MouseLeftButtonDown"> <ei:ChangePropertyAction PropertyName="SelectedItemInCanvas" TargetObject="{Binding .}" Value="{x:Null}" /> </i:EventTrigger> </i:Interaction.Triggers>--> <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Transparent"> <Image x:Name="imgBackgroundImage" Source="{Binding SelectedTerrain.ImagePath}" IsHitTestVisible="False" /> <ListBox x:Name="_itemContainer" ItemsSource="{Binding ItemsInCanvas}" Visibility="{Binding SelectedTerrain, ConverterParameter=True, Converter={StaticResource IsNullToVisibilityConverter}}" SelectedItem="{Binding SelectedItemInCanvas, Mode=TwoWay}" HorizontalAlignment="Stretch" AllowDrop="True" Background="Transparent" VerticalAlignment="Stretch" ClipToBounds="False" SelectionMode="Single" ItemContainerStyleSelector="{StaticResource ItemInCanvasContainerStyleSelector}" BorderBrush="{x:Null}" Style="{StaticResource ItemContainerListBoxStyle}" PreviewDrop="ItemsControl_Drop_1"> <!--TODO DROP BEHAVIOR--> <!--<i:Interaction.Triggers> <i:EventTrigger EventName="Drop"> <ei:CallMethodAction MethodName="ItemDropped" /> </i:EventTrigger> </i:Interaction.Triggers>--> <ListBox.ItemsPanel> <ItemsPanelTemplate> <Canvas SnapsToDevicePixels="True" IsItemsHost="True" ClipToBounds="False" /> </ItemsPanelTemplate> </ListBox.ItemsPanel> </ListBox> </Grid> </controls:MovingThumContainerBound> </Viewbox> <Canvas x:Name="_selectionCanvas"/> </Grid>
Les éléments de redimensionnement sont inclus par ResourceDictionary
selon le type d’item dans ma liste box :
Code :Sélectionner tout - Visualiser dans une fenêtre à part<Style TargetType="{x:Type Shape}" x:Key="ResizeRotateThumbCorner"> <Setter Property="SnapsToDevicePixels" Value="true" /> <Setter Property="Stroke" Value="Black" /> <Setter Property="StrokeThickness" Value="1" /> <Setter Property="Width" Value="8" /> <Setter Property="Height" Value="8" /> <Setter Property="Margin" Value="-2" /> <Setter Property="Fill" Value="{StaticResource ResizeRotateThumbCornerFillBrush}" /> </Style>
Merci d'avance pour une piste !
Xavier- Déplacé Aurel Bera mercredi 7 novembre 2012 08:56 (Origine :Visual C#)
- Type modifié Aurel Bera jeudi 15 novembre 2012 10:48 Pas de reponse
- Type modifié Aurel Bera mardi 20 novembre 2012 09:13 Resolu
Réponses
-
Bonjour,
J'ai finalement implémenté une solution alternative : www.developpez.net/forums/d1276526/dotnet/developpement-windows/windows-presentation-foundation/scaling-selectif-viewbox/#post6965348
ça a nécessité beaucoup de changement car j'avais pas mal de code lié à ça ; mais globalement, ça répond concrètement à mon problème ;)
Cordialement,Xavier
- Marqué comme réponse Aurel Bera mardi 20 novembre 2012 09:14
Toutes les réponses
-
Bonjour
Merci d’avoir contacté les forums MSDN.
J’ai déplacé votre thread vers le forum dédiée WPF.
Cordialement,
-
Bonjour
Prenez quelques minutes pour lire ça:
http://social.msdn.microsoft.com/Forums/en/wpf/thread/9672ee69-6342-4fda-879f-287bfa91c9c3
Pour traduction vous pouvez utiliser http://www.bing.com/translator/
Cordialement,
- Modifié Aurel Bera mercredi 7 novembre 2012 10:04
-
Bonjour,
Est-ce que vous avez testé les solutions proposées ? Merci de partager avec nous les résultats, afin que d'autres personnes avec le même problème puissent profiter de cette solution.
Cordialement,
Aurel
-
-
Bonjour,
Nous changeons le type de votre question à « Discussion générale » parce que vous n’êtes pas revenu avec les informations sollicitées. Si vous avez plus de temps pour réexaminer la question et fournir plus d'informations, n'hésitez pas à modifier le type du thread à « Question ». Si le problème est résolu, s’il vous plaît partagez la solution avec nous afin que la réponse puisse être trouvée et utilisée par d'autres membres de la communauté ayant des questions similaires.
Merci !
Cordialement,
Aurel
-
Bonjour,
J'ai finalement implémenté une solution alternative : www.developpez.net/forums/d1276526/dotnet/developpement-windows/windows-presentation-foundation/scaling-selectif-viewbox/#post6965348
ça a nécessité beaucoup de changement car j'avais pas mal de code lié à ça ; mais globalement, ça répond concrètement à mon problème ;)
Cordialement,Xavier
- Marqué comme réponse Aurel Bera mardi 20 novembre 2012 09:14
-
Bonjour,
Pouvons-nous considérer que vous avez résolu votre problème?
N'hésitez pas à revenir et supprimer la réponse marquée si la solution n’est pas correcte. Merci !
Cordialement,
Aurel