Taille et propriétés 3D en WPF
-
jeudi 5 avril 2012 13:42
Bonjour,
Voici un code WPF qui définit un Grid avec une bordure 3D et qui contient une image.
<Grid Name="GridPicBox" Margin="10" > <Border BorderThickness="2,2,0,0" BorderBrush="{StaticResource BordFoncé}"> <Border.Effect> <DropShadowEffect BlurRadius="1" Direction="330" Opacity="1" ShadowDepth="2" Color="WhiteSmoke" /> </Border.Effect> <Image Source="/WpfPixi;component/Images/inf2.gif"></Image> </Border> </Grid>Dans cet exemple l'image est agrandie ou rapetissée pour prendre la taille du Grid. Mais comment faire pour que le Grid adopte automatiquement celle de l'image qu'il contient ?J'ai utilisé ici un Grid mais il existe peut-être une meilleure façon de faire.
Par ailleurs, les propriétés du <DropShadowEffect>, ne donnent pas accès aux ressources locales pour la propriété "Color".
Par exemple la déclaration suivante est en erreur :
<DropShadowEffect BlurRadius="1" Direction="330" Opacity="1" ShadowDepth="2" Color="{StaticResource BordFoncé}" />Comment faire dans ce cas précis (dans d'autres contextes cela fonctionne) pour utiliser une couleur définie dans les ressources, comme ceci : <SolidColorBrush x:Key="BordFoncé" Color="#FFB6B679"/>
Merci d'avance pour vos suggestions.
Alain
- Modifié AchLog jeudi 5 avril 2012 13:45 correction
Toutes les réponses
-
jeudi 5 avril 2012 14:40
Le Grid s'adapte à son container, pas à son contenu. En revanche, ses lignes et colonnes peuvent s'adapter à son contenu. (RowDefinition Height="Auto").
Concernant DropShadow, c'est une mauvaise idée de l'utiliser. Côté perfs, c'est une catastrophe.
Richard Clark
Consultant - Formateur .NET
http://www.c2i.fr
Depuis 1996: le 1er site .NET francophone- Marqué comme réponse Ciprian DuduialaOwner mercredi 18 avril 2012 13:54
-
jeudi 5 avril 2012 15:19
Merci Richard pour votre réponse rapide.
Ok Pour le Grid. Je vais spécifier une ligne d'une colonne.
Pour le DropShadow, y a-t-il une autre solution pour réaliser une "zone" en creux 3D pour y placer une image ou du texte ?
Cordialement
Alain
-
jeudi 5 avril 2012 15:24
Attention, je pense que vous avez mal compris : Si votre Grid est dans un container qui fait 800 de large et que vous n'y mettez qu'une ligne et une colonne avec une image de 500, la grille fera toujours 800.
En revanche, si il y 2 colonnes :
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>Avec l'image dans la colonne 0, la colonne 0 fera 500 et la 1, 800-500 = 300
Mais la grille elle, dera toujours 800.
Tout dépend ce que vous voulez mettre avec dans la grille. Sinon, essayez le StackPanel qui lui, s'ajuste à son contenu.
Pour l'effet, un autre Border gris avec un décalalge de quelques pixels (transformRender)
Richard Clark
Consultant - Formateur .NET
http://www.c2i.fr
Depuis 1996: le 1er site .NET francophone- Marqué comme réponse Ciprian DuduialaOwner mercredi 18 avril 2012 13:54
-
jeudi 5 avril 2012 19:32
Merci Richard,
Oui, en effet, pour le Grid il faut deux colonnes.
Vous avez sans doute compris que je voulais présenter une image (sa vignette) dans un cadre en 3D.
Mais je voulais ce cadre en creux, tel qu'il se présente dans une application actuelle WinForm que je veux transformer en WPF. Il y a donc deux bords sous-exposés et deux bords sur-exposés.
Une solution avec double Border permet-elle de rendre cela ?
Je ne connais que très peu WPF que je découvre. Avez-vous un livre ou un site (en français de préférence) et des ressources à me recommander pour avancer ?
Merci de votre réponse.
Cordialement
Alain
-
vendredi 6 avril 2012 06:43
Effectivement c'est une possibilité (la double bordure) bien que la tendance actuelle soit plutôt au design "light" ;-)
Concernant des sites sur WPF, vous pouvez aller sur le groupe "French WPF & Silverlight" sur Facebook qui vous renseignera peut être (seul problème, c'est que ce sont souvent des articles sur des fonctionnalités avancées :P).
Richard Clark
Consultant - Formateur .NET
http://www.c2i.fr
Depuis 1996: le 1er site .NET francophone- Marqué comme réponse AchLog vendredi 6 avril 2012 12:36
-
vendredi 6 avril 2012 12:35
Merci pour ces infos Richard,
Effectivement j'ai aussi pensé au coté plus light des IHM. Je vais peut-être m'orienter vers cela.
Cordialement
Alain

