2009-09-08 2 views
7

Интересно, возможно ли связать элемент структуры, такой как BorderThickness.Top, с соответствующим свойством TemplatedParent. Я попыталсяКак TemplateBind to BorderThickness.Top (или снизу или слева или справа)?

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

Причина я хочу сделать это я хочу левый и правый быть 0 и только сверху и снизу быть связаны.

Заранее спасибо.

ответ

13

Это невозможно, потому что Толщина - это тип значения - вы можете создавать привязки только для свойств зависимостей объектов зависимостей.

Что вы можете сделать, это связывание BorderThickness как обычно:

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

затем использовать преобразователь для возврата соответствующим образом модифицированную Толщина:

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); 
} 

Можно даже использовать ConverterParameter указать, какие части Толщина очистить.

+0

ахам ... большое спасибо 4 ваших быстрого и точного ответа ... я недавно узнал о свойствах зависимостей ... как я могу забыть, что ?! – mg007

0

Да, вы можете сделать это непосредственно в XAML без преобразователя. {TemplateBinding …} - только синтаксический сахар для {Binding RelativeSource={RelativeSource TemplatedParent} …} с ограниченной функциональностью.

ваши: решение проблемы:

<Thickness Left="0" Right="0" Top="{Binding BorderThickness.Top, RelativeSource={RelativeSource TemplatedParent}}" Bottom="{Binding BorderThickness.Bottom, RelativeSource={RelativeSource TemplatedParent}}" /> 
Смежные вопросы