Frage

Ich frage mich, ob es möglich ist, ein Strukturelement wie BorderThickness.Top zu TemplatedParent der entsprechenden Eigenschaft zu binden. Ich habe versucht,

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

Der Grund, warum ich dies tun wollen ist, ich will linke und rechte 0 zu sein und nur oben und unten gebunden werden.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Dies ist nicht möglich, weil Dicke ein Wert-Typ ist - man kann nur schaffen Bindungen auf Abhängigkeitseigenschaften von Abhängigkeitsobjekten.

Was Sie tun können, ist verbindlich BorderThickness als normal:

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

dann einen Konverter verwenden, um eine entsprechend modifizierte Stärke zurück:

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

Sie könnten sogar Converter verwenden, um festzulegen, welche Teile der Dicke zu löschen.

Andere Tipps

Die Lösung mit einem Konverter ist die richtige.

In dem Fall, dass Sie nur in einem Wert interessiert sind, können Sie dies direkt in dem XAML ohne Konverter . {TemplateBinding …} ist nur ein syntaktischer Zucker für {Binding RelativeSource={RelativeSource TemplatedParent} …} mit eingeschränkter Funktionalität.

Zum Beispiel einige benutzerdefinierte Grenze:

<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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top