J'ai créé un usercontrol code> pour afficher une fenêtre contextuelle à l'aide d'un
textblock code> dans un
Canvas code>. Tout semble fonctionner correctement, sauf pour la couleur de fond de la toile. Il est rendu comme transparent, peu importe ce que j'essaie. J'ai aussi essayé d'ajouter un
rectangle code> et de le remplir mais cela ne fonctionne pas non plus. Voici le code:
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:Custom="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:ic="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"
xmlns:System="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
x:Class="PopupText.CanvasPopup"
d:DesignWidth="456"
d:DesignHeight="129">
<StackPanel x:Name="LayoutRoot"
Orientation="Horizontal">
<!--This button toggles the visibility of the popup-->
<Button x:Name="ActivateButton"
HorizontalAlignment="Left"
VerticalAlignment="Top"
BorderThickness="0"
Click="OnActivateButtonClicked">
<Image Source="/pushpin.png"
Width="36"
Height="36"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Stretch="Fill"
Margin="0" />
</Button>
<Canvas x:Name="PopupContainer"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Width="{Binding Width, ElementName=PopupText}"
Height="{Binding Height, ElementName=PopupText}"
Visibility="Collapsed">
<Canvas.Background>
<LinearGradientBrush EndPoint="0.5,1"
StartPoint="0.5,0">
<GradientStop Color="Black"
Offset="0" />
<GradientStop Color="#7FA79797"
Offset="1" />
</LinearGradientBrush>
</Canvas.Background>
<Rectangle Canvas.Left="0"
Canvas.Top="0"
RadiusX="20"
RadiusY="20"
Width="{Binding Width, ElementName=PopupText}"
Height="{Binding Height, ElementName=PopupText}">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0.5,1"
StartPoint="0.5,0">
<GradientStop Color="Black"
Offset="0" />
<GradientStop Color="#7F67749D"
Offset="1" />
</LinearGradientBrush>
</Rectangle.Fill>
<Rectangle.Stroke>
<LinearGradientBrush EndPoint="0.5,1"
StartPoint="0.5,0">
<GradientStop Color="Black"
Offset="0" />
<GradientStop Color="#7FC89B9B"
Offset="1" />
</LinearGradientBrush>
</Rectangle.Stroke>
</Rectangle>
<TextBlock x:Name="PopupText"
Text="A really long line of text that will either overflow or wrap"
TextWrapping="Wrap"
Width="350"
Canvas.Left="0"
Canvas.Top="0" />
</Canvas>
</StackPanel>
</UserControl>
3 Réponses :
Vos gradients semblent fonctionner si vous définissez la hauteur manuellement. Il apparaîtrait que votre liaison d'élément de hauteur ne fonctionne pas comme vous l'attendez aussi. P>
J'ai testé votre toile isolément avec hauteur 300, rectangle hauteur 200 et il n'a pas fait beaucoup de différence esthétiquement quelle était la hauteur de la textblock. Les deux gradients ont fonctionné bien, pour la toile et le rectangle. P>
Vous liez la propriété Hauteur de la toile et le rectangle à celui du texte TextBlock, mais le TextBlock a une propriété de hauteur "auto". XAML ne peut pas attribuer une valeur de hauteur à ces éléments pour cette raison. Essayez de régler la hauteur du texte de texte manuellement plutôt que automatiquement. Cela affectera immédiatement les deux autres éléments. P>
P.s. Si vous supprimez la largeur = "350" du texte textuel, la toile et le rectangle auront 0 hauteur et largeur sur le panneau de pile. Vous devez définir les propriétés de la hauteur et de la largeur du texte textuel manuellement car les deux autres éléments en dépendent. P>
On dirait que vous souhaitez lier la taille de la toile code> sur la taille réelle du texte Dans cette cas, utilisez une liaison comme ceci: p> textblock code> non des valeurs spécifiées au moment de la conception.