Encore moi ...
Je souhaite faire une chose extrêmement simple : écrire du texte en blanc avec une bordure noire.
Comment faire ? (j'ai honte ...)
Encore moi ...
Je souhaite faire une chose extrêmement simple : écrire du texte en blanc avec une bordure noire.
Comment faire ? (j'ai honte ...)
Salut,
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part <Label Content="texte" Foreground="White" BorderBrush="Black" BorderThickness="1" />
Non c'est pas ça que je veux faire, voici ce que je veux (pièce jointe). Le texte est noir et entouré en rouge. Je cherche à faire le même effet en WPF ...
Comme tu avais dit que tu voulais faire quelque chose d'extrêmement simple
Pour le coup, je ne sais pas si WPF propose un truc tout fait pour ça...
Ça doit être faisable en utilisant un BitmapEffect (mais les BitmapEffect ne sont pas trop recommandé).
Sinon la bonne vielle méthode de superposition de deux TextBlock avec un léger scale sur le TextBlock inférieur![]()
La superposition donne un truc affreux, même avec Paint c'est plus beau
Sinon j'ai pondu ça :
mais bon, c'est toujours pas exactement ce que je veux
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <TextBlock FontSize="14" Foreground="White" Margin="2,0,0,2"> <ContentPresenter></ContentPresenter> <TextBlock.BitmapEffect> <OuterGlowBitmapEffect GlowColor="Black" GlowSize="4" Noise="0" Opacity="1"/> </TextBlock.BitmapEffect> </TextBlock>![]()
Ouep j'ai essayer, en jouant un peu sur le GlowSize et en mettant la valeur à 1, c'est un peu plus ce que tu veux![]()
Tu ne peux pas redéfinir le OuterGlowBitmapEffect et supprimer le flou ?
Bonjour,
Je ne sais pas si c'est possible directement à partir du texte, mais en le convertissant en Geometry, je sentais bien qu'on pouvait en faire quelque chose.
je te poste un exemple, ça peut te donner des idées.
Désolé. Par redéfinir j'entend créer un ControlTemplate adapté à tes besoins (ie sans flou) à partir de l'original.
Note que je en sais pas si c'est faisable pour le OuterGlowBitmapEffect, mais c'est comme ça que je procède à chaque fois qu'un élément graphique me résiste ^^
Mince, je suis embêté pour utiliser le code de Thrud : au départ j'ai juste une image et un tooltip et c'est via un Style que je faisait le tout. On peut peut pas créer du code derrière un Style ?
En fait, j'ai ça :
Comment je me débrouille pour utiliser le code ?
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 <Style x:Key="ImageItemToolTipStyle" TargetType="{x:Type ToolTip}"> <Setter Property="Placement" Value="Top"/> <Setter Property="PlacementRectangle" Value="-5,-50,0,0"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ToolTip}"> <Grid Width="{TemplateBinding Width}" Height="30"> <TextBlock FontSize="14" Foreground="White" Margin="2,0,0,2"> <ContentPresenter></ContentPresenter> <TextBlock.BitmapEffect> <OuterGlowBitmapEffect GlowColor="Black" GlowSize="4" Noise="0" Opacity="1"/> </TextBlock.BitmapEffect> </TextBlock> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>![]()
euh, ça marche en passant par un convertisseur, je sais pas si c'est la meilleure façon de faire :
j'ai modifi& ton style comme ça, je vire le ContentPresenter et le TextBlock avec l'effet, et je les remplace par un Path.
et ajoute une classe StringToPathConverter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25<local:StringToPathConverter x:Key="stringToPathConverter" /> <Style TargetType="{x:Type ToolTip}"> <Setter Property="Placement" Value="Top"/> <Setter Property="PlacementRectangle" Value="-5,-50,0,0"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ToolTip}"> <Grid Width="{TemplateBinding Width}" Height="30"> <Path Fill="White" Stroke="Black" Data="{TemplateBinding Content, Converter={StaticResource stringToPathConverter}}"> </Path> <!--<TextBlock FontSize="14" Foreground="White" Margin="2,0,0,2"> <ContentPresenter></ContentPresenter> <TextBlock.BitmapEffect> <OuterGlowBitmapEffect GlowColor="Black" GlowSize="4" Noise="0" Opacity="1"/> </TextBlock.BitmapEffect> </TextBlock>--> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>
bon, dans mon programme de test, ça s'affiche pas vraiment sur le label, mais ça, c'est du réglage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 using System; using System.Globalization; using System.Windows; using System.Windows.Data; using System.Windows.Media; namespace TestTextGeometry { class StringToPathConverter : IValueConverter { #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { String strText = value as String;// "Text to display"; if (strText != null) { FormattedText oText = new FormattedText(strText, CultureInfo.GetCultureInfo("fr-fr"), FlowDirection.LeftToRight, new Typeface("Comic sans MS"), 25, Brushes.Black); return oText.BuildGeometry(new Point(0, 0)); } return null; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } #endregion } }
Partager