2009-09-08 17 views
7

Mi chiedo se sia possibile associare un elemento della struttura come BorderThickness.Top alla proprietà corrispondente di TemplatedParent. Ho provatoCome TemplateBind to BorderThickness.Top (o Bottom o Left o Right)?

<Border Margin="0" Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}"> 
    <Border.BorderThickness> 
     <Thickness Left="0" Right="0" Top="{TemplateBinding BorderThickness.Top}" Bottom="{TemplateBinding BorderThickness.Bottom}"/> 
    </Border.BorderThickness> 
</Border> 

Il motivo che voglio fare questo è che voglio sinistro e destro a 0 e solo Alto e basso vincolati.

Grazie in anticipo.

risposta

13

Questo non è possibile perché lo spessore è un tipo di valore: è possibile creare solo associazioni sulle proprietà di dipendenza degli oggetti di dipendenza.

cosa si potrebbe fare è vincolante BorderThickness come normale:

<Border Margin="0" 
     Padding="{TemplateBinding Padding}" 
     BorderBrush="{TemplateBinding BorderBrush}" 
     BorderThickness="{TemplateBinding BorderThickness, Converter={StaticResource ThicknessConverter}}" /> 

quindi utilizzare un convertitore per restituire uno spessore opportunamente modificato:

object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    var thickness = (Thickness) value; 
    return new Thickness(0.0, thickness.Top, 0.0, thickness.Bottom); 
} 

Si potrebbe anche usare ConverterParameter per specificare quali parti del Spessore da cancellare.

+0

ahaa ... vi ringrazio molto 4 vostra risposta rapida e precisa ... Recentemente ho imparato a conoscere le proprietà di dipendenza ... come posso dimenticare che ?! – mg007

0

Sì, è possibile farlo direttamente nel XAML senza un convertitore . {TemplateBinding …} è solo uno zucchero sintattico per {Binding RelativeSource={RelativeSource TemplatedParent} …} con una funzionalità limitata.

tuo di soluzione del problema:

<Thickness Left="0" Right="0" Top="{Binding BorderThickness.Top, RelativeSource={RelativeSource TemplatedParent}}" Bottom="{Binding BorderThickness.Bottom, RelativeSource={RelativeSource TemplatedParent}}" />