2009-09-08 11 views
7

BorderThickness.Topのような構造要素をTemplatedParentの対応するプロパティにバインドすることが可能かどうかと思います。私は私がこれをしたい理由は、私は左と右が0になりたいであり、唯一のトップとボトムをバインドするTemplateBindThickness.Top(またはBottomまたはLeftまたは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> 

を試してみました。

ありがとうございます。

答えて

13

厚さは値型であるため、これは不可能です。依存オブジェクトの依存関係プロパティに対してのみバインディングを作成できます。あなたは何ができるか

は通常通りBorderThicknessを結合されています。あなたものどの部分を指定するConverterParameterを使用することができ

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

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

はその後、適宜変更厚さを返すためにコンバータを使用しますクリアする厚さ。

+0

ahaaは...あなたの迅速かつ正確な回答とても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}}" /> 
関連する問題