0

现在我正在“作弊”并使用以下内容:

<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*(...)有没有另一种方法来完成这个?

4

1 回答 1

0

要在绑定中运行代码,请使用转换器类。

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 绑定窗口自动添加资源和绑定。

于 2012-03-15T23:08:35.310 回答