2010-03-24 4 views
10

Sto provando a replicare l'effetto "riflesso" oggigiorno così di moda su un controlme per i pulsanti che sto creando.RectangleGeometry con dimensioni relative ... come?

L'idea di base è quella di creare un rettangolo con un riempimento sfumato da bianco a trasparente e quindi ritagliare alcuni di quel rettangolo semitrasparente con un rettangologeometria.

Il problema è che non so come definire una geometria relativa del rettangolo. Ho lavorato intorno alla larghezza definendo un grande valore (1000), ma l'altezza è un problema. Ad esempio, funziona bene per i pulsanti che hanno un'altezza di 200, ma non fa nulla per i pulsanti più piccoli.

Qualche idea?

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

risposta

11

Si potrebbe fare questo con un MultiBinding e una nuova 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(); 
    } 
} 

e utilizzato in questo modo nel vostro 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> 
+0

Mi dice: 'Il nome "MultiBinding" non esiste nello spazio dei nomi "http://schemas.microsoft.com/client/2007". ' –

+0

Non so per cosa sia lo spazio dei nomi xaml, ma il tuo dovrebbe essere 'http: // schemas.microsoft.com/winfx/2006/xaml/presentation'. –

+0

Ho: 'xmlns =" ​​http://schemas.microsoft.com/winfx/2006/xaml/presentation "' e 'xmlns: x =" http://schemas.microsoft.com/winfx/2006/xaml "'. Non una sola volta c'è "2007" nella mia soluzione. È un'applicazione Windows Phone 8. –