Как связать RadiusX прямоугольника с ActualHeight прямоугольника и умножить его на некоторое число в Expression Blend 4 (или VS)? - PullRequest
0 голосов
/ 14 марта 2012

Сейчас я "обманываю" и использую следующее:

<Rectangle x:Name="rectangle" Stroke="SlateGray" 
   Width="{TemplateBinding ActualWidth}" Height="{TemplateBinding ActualHeight}" 
   HorizontalAlignment="Stretch"  VerticalAlignment="Stretch"
   SizeChanged="rectangle_SizeChanged">
</Rectangle>

<x:Code>
  <![CDATA[ private void rectangle_SizeChanged(object sender, SizeChangedEventArgs e)
     {
        Rectangle r = sender as Rectangle;
        r.RadiusX = r.Height / 2;
        r.RadiusY = r.Height / 2;
     }
    ]]>
</x:Code>

Это x:Code отлично работает во время выполнения и выполняет то, что я хочу. но я действительно хочу, чтобы он мгновенно изменился на Artboard, выполнив что-то вроде:

<Rectangle x:Name="rectangle" Stroke="SlateGray" 
   Width="{TemplateBinding ActualWidth}" Height="{TemplateBinding ActualHeight}" 
   HorizontalAlignment="Stretch"  VerticalAlignment="Stretch"
   RadiusX=".5*({TemplateBinding ActualHeight})"
   RadiusY=".5*({TemplateBinding ActualHeight})"> 
</Rectangle>

Но нет способа включить это .5*(...) Есть ли другой способ сделать это?

1 Ответ

0 голосов
/ 16 марта 2012

Для запуска кода в привязке вы используете класс конвертера.

public class MultiplyConverter : IValueConverter 
{ 

  public double Multipler{ get; set; } 

  public object Convert(object value, Type targetType, 
         object parameter, System.Globalization.CultureInfo culture) 
    { 
        double candidate = (double)value; 
        return candidate * Multipler ;
    } 

  public object ConvertBack(object value, Type targetType, 
         object parameter, System.Globalization.CultureInfo culture) 
    { 

        throw new NotSupportedException(); 
    } 
} 

Затем добавьте конвертер в раздел Ресурсы.

<Window.Resources>
    <local:MultiplyConverter x:Key="MultiplyConverter" Multipler="5"/>
</Window.Resources>

И добавьте обложку в свою привязку.

<Rectangle x:Name="rectangle" Fill="#FFA4A4E4"
        RadiusX="{Binding ActualHeight, Converter={StaticResource MultiplyConverter}, ElementName=rectangle}"
        RadiusY="{Binding ActualWidth, Converter={StaticResource MultiplyConverter}, ElementName=rectangle,}" />

Вы можете использовать окна привязки Blend для автоматического добавления ресурса и привязки.

...