代码之家  ›  专栏  ›  技术社区  ›  Padu Merloti

矩形几何与相对尺寸…如何?

  •  10
  • Padu Merloti  · 技术社区  · 16 年前

    其基本思想是创建一个从白色到透明的渐变填充矩形,然后用矩形几何体剪裁一些半透明矩形。

    问题是我不知道如何定义一个相对的矩形几何体。我通过定义一个大值(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>
    
    1 回复  |  直到 16 年前
        1
  •  11
  •   Abe Heidebrecht    16 年前

    你可以用一个 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();
        }
    }
    

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