RectangleGeometry с относительными размерами …, как?

Я пытаюсь копировать в наше время так модный "отраженный" эффект на controltemplate для кнопок, которые я создаю.

Основная идея состоит в том, чтобы создать прямоугольник с заливкой градиента от белого к прозрачному и затем отсечь часть того полупрозрачного прямоугольника с rectanglegeometry.

Проблема состоит в том, что я не знаю, как определить относительную прямоугольную геометрию. Я отчасти работал вокруг ширины путем определения большого значения (1000), но высота является проблемой. Например, это работает хорошее для кнопок, которые имеют 200 высот, но ничего не делает для меньших кнопок.

Какие-либо идеи?

            <Rectangle RadiusX="5" RadiusY="5" StrokeThickness="1" Stroke="Transparent">
                <Rectangle.Fill>
                    <LinearGradientBrush StartPoint="0,0" EndPoint="0,0.55">
                        <GradientStop Color="#66ffffff" Offset="0.0"  />
                        <GradientStop Color="Transparent" Offset="1.0" />
                    </LinearGradientBrush>
                </Rectangle.Fill>
                <Rectangle.Clip>
                    <RectangleGeometry Rect="0,0,1000,60" />
                </Rectangle.Clip>
            </Rectangle>
10
задан Padu Merloti 24 March 2010 в 19:48
поделиться

1 ответ

Вы можете сделать это с помощью MultiBinding и нового IMultiValueConverter :

public class RectangleConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
        // you can pass in the value to divide by if you want
        return new Rect(0, 0, (double)values[0], (double)values[1] / 3.33);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

И использовать его в ваш XAML:

<lcl:RectangleConverter x:Key="rectConverter" />

...

<RectangleGeometry>
    <RectangleGeometry.Rect>
        <MultiBinding Converter="{StaticResource rectConverter}">
            <Binding Path="ActualWidth" RelativeSource="{RelativeSource AncestorType={x:Type Button}}" />
            <Binding Path="ActualHeight" RelativeSource="{RelativeSource AncestorType={x:Type Button}}" />
        </MultiBinding>
    </RectangleGeometry.Rect>
</RectangleGeometry>
11
ответ дан 4 December 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: