9
votes

WPF: MEMPLATELLINGING DE SAILLEHILLATION DE LA SHAPE NE FONCTIONNE PAS?

On dirait que l'ellipse dans ControlTemplate ne reçoit pas la frontière, mais pourquoi?

<Window.Resources>
    <ControlTemplate x:Key="EllipseControlTemplate" TargetType="{x:Type TextBox}">
        <Grid>
            <Ellipse 
                Width="{TemplateBinding ActualWidth}" 
                Height="{TemplateBinding ActualHeight}" 
                Stroke="{TemplateBinding Foreground}" 
                StrokeThickness="{TemplateBinding BorderThickness}" />
                <ScrollViewer Margin="0" x:Name="PART_ContentHost" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Grid>
    </ControlTemplate>
</Window.Resources>
<Grid>
    <TextBox
        Template="{DynamicResource EllipseControlTemplate}" 
        Foreground="Green"
        BorderThickness="15" />
</Grid>


0 commentaires

4 Réponses :


7
votes

Borderthickness n'est pas si facile, il s'agit d'une structure de type épaisseur (et peut être composite, comme Borderthickness = ". 0, 0,0,2 , 2 "), tandis que strokethickness de type double .

Vous avez besoin ivenueconverter pour faire ce travail de liaison.


3 commentaires

Je m'excuse, j'ai déjà trouvé la réponse. Voir la réponse que j'ai écrite ... Vous vouliez probablement dire ça.


Bon pour vous :) Néanmoins, le mien était plus tôt :)


C'est vrai! Je choisirai la vôtre comme solution si vous mentionnez la différence de type, c'est la clé ici.



1
votes

Il y avait nommé Gotcha: Borderthickness est le type d'épaisseur et Strokethickness est le type de double . Nous avons donc besoin ivenueconverter .


0 commentaires

1
votes

Vous pouvez également utiliser la propriété DataContext de l'ellipse: xxx

espère que cela aide!


0 commentaires

16
votes

Une autre solution possible ... (Parce que j'aime seulement utiliser des ihancesconverters en dernier recours, et la modification du DataContext de l'ellipse pourrait ne pas fonctionner si vous en avez besoin pour être réglé sur autre chose):

<Ellipse StrokeThickness="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=BorderThickness.Top}" />


1 commentaires

NIT-Choisissez cette excellente réponse: je pense que Borderthickness.left est en fait la valeur préférée à utiliser car elle est la première valeur. Voir Cette réponse sur la marge mais La commande est la même pour l'épaisseur .