كيف يمكن templatebind إلى borderthickness.top (أو أسفل أو يسار أو يمين)؟

StackOverflow https://stackoverflow.com/questions/1392764

سؤال

أتساءل عما إذا كان من الممكن ربط عنصر بنية مثل الحدود. top to templatedparent المقابلة. لقد حاولت

<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 و LOTE أعلى وأسفل ملزمة.

شكرا لك مقدما.

هل كانت مفيدة؟

المحلول

هذا غير ممكن لأن السماكة عبارة عن نوع من القيمة - يمكنك فقط إنشاء روابط على خصائص التبعية لكائنات التبعية.

ما يمكنك فعله هو ربط الحدود كالمعتاد:

<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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top