防止不均匀的Border CornerRadius

时间:2018-04-03 17:17:11

标签: wpf xaml border styling cornerradius

我试图制作一个Pill按钮,其中CornerRadius是按钮高度的一半(在按钮的每一端都有一个半圆。真的,我希望它是一半按钮的较小尺寸(这么高又瘦的按钮会起作用)

当我增加CornerRadius(例如,如果我将它绑定到高度)时,它会扭曲角落,直到它成为一个完整的椭圆。有没有办法保持半径圆?

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用多重绑定和多转换器。 您可能还想考虑不同的除数。也许3。

    <Border  Background="Blue">
        <Border.CornerRadius>
            <MultiBinding Converter="{local:MultiDividerConverter Divisor=2}">
                <Binding Path="ActualWidth"
                         RelativeSource="{RelativeSource Self}" 
                         />
                <Binding Path="ActualHeight"
                         RelativeSource="{RelativeSource Self}" 
                         />
            </MultiBinding>
        </Border.CornerRadius>
    </Border>

public class MultiDividerConverter : MarkupExtension, IMultiValueConverter
{
    public double Divisor { get; set; } = 2.0;

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        double minDim = values.Select(x => System.Convert.ToDouble(x ?? 0.0)).Min();
        if (minDim == 0)
            return new CornerRadius(0);
        return new CornerRadius(minDim / Divisor);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        return null;
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return this;
    }
}