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(); 
    } 
} 

次に、Resources セクションにコンバーターを追加します。

<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 に答える