Domanda

Sembra che la seguente Ellisse in ControlTemplate non ottenga BorderThickness, ma perché?

<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>

TemplateBinding to Foreground funziona bene, l'ellisse è verde. Ma per StrokeThickness non sembra funzionare, perché?

È stato utile?

Soluzione

BorderThickness non è così semplice, è una struttura di tipo Spessore (e può essere composita, come BorderThickness = " .0, .0, 2,2 " ), mentre la proprietà StrokeThickness è di tipo double .

È necessario IValueConverter per far funzionare questa associazione.

Altri suggerimenti

Un'altra possibile soluzione ... (perché mi piace usare solo IValueConverters come ultima risorsa e cambiare il DataContext di Ellipse potrebbe non funzionare se è necessario che sia impostato su qualcos'altro):

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

Ciò equivale all'intento originale (per associare TemplatedParent), ma l'utilizzo del markup a mano lunga consente di specificare un percorso anziché solo una proprietà

C'era il nome del gotcha: BorderThickness è il tipo di Thickness e StrokeThickness è il tipo di double . Quindi abbiamo bisogno di IValueConverter .

Puoi anche usare la proprietà DataContext di Ellipse:

<Ellipse DataContext="{TemplateBinding BorderThickness}" StrokeThickness="{Binding Top}" />

Spero che questo aiuti!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top