どのようにTemplateBindにBorderThickness.Top(または下または左または右)へ?
-
21-09-2019 - |
質問
TemplatedParentの対応するプロパティに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とだけトップとボトムBEバインドになりたいです。
事前に感謝します。
解決
厚さが値型であるため、
これは不可能です - あなただけの依存オブジェクトの依存関係プロパティにバインディングを作成することができます。
あなたは通常通り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を使用することができます。
他のヒント
変換器を有する溶液が正しいものである。
あなたは一つの値だけに興味がある場合は、あなたは、コンバータののなしのXAMLので直接これを行うことができます。 {TemplateBinding …}
は、限られた機能を持つ{Binding RelativeSource={RelativeSource TemplatedParent} …}
のためだけ糖衣構文です。
のいくつかのカスタムボーダー例:の
<Button BorderBrush="Purple"
BorderThickness="1 2 3 4"
Content="This is a button!">
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<DockPanel>
<Rectangle DockPanel.Dock="Left"
Width="{Binding BorderThickness.Left, RelativeSource={RelativeSource TemplatedParent}}"
Fill="{Binding BorderBrush, RelativeSource={RelativeSource TemplatedParent}}" />
<Rectangle DockPanel.Dock="Top"
Height="{Binding BorderThickness.Top, RelativeSource={RelativeSource TemplatedParent}}"
Fill="{Binding BorderBrush, RelativeSource={RelativeSource TemplatedParent}}" />
<Rectangle DockPanel.Dock="Right"
Width="{Binding BorderThickness.Right, RelativeSource={RelativeSource TemplatedParent}}"
Fill="{Binding BorderBrush, RelativeSource={RelativeSource TemplatedParent}}" />
<Rectangle DockPanel.Dock="Bottom"
Height="{Binding BorderThickness.Bottom, RelativeSource={RelativeSource TemplatedParent}}"
Fill="{Binding BorderBrush, RelativeSource={RelativeSource TemplatedParent}}" />
<ContentPresenter />
</DockPanel>
</ControlTemplate>
</Button.Template>
</Button>
所属していません StackOverflow