0

このリソースCentering On Canvasを見つけました。しかし、問題は、キャンバスの左と上の値がゼロを返し、例外をスローしているため、C# を介して同じことを使用できないことです。常に xaml を介してキャンバスに要素を配置するとは限らないため、C# を使用してこれを実装するにはどうすればよいでしょうか。助けてください。

<Canvas.Left>
 <MultiBinding Converter="{StaticResource MidValue}"
               ConverterParameter="1">
   <Binding ElementName="cnvMain2"
            Path="ActualWidth" />
   <Binding ElementName="tbSize2"
            Path="ActualWidth" />
 </MultiBinding>
</Canvas.Left>
<Canvas.Top>
 <MultiBinding Converter="{StaticResource MidValue}"
               ConverterParameter="7">
   <Binding ElementName="cnvMain2"
            Path="ActualHeight" />
   <Binding ElementName="tbSize2"
            Path="ActualHeight" />
 </MultiBinding>
</Canvas.Top>
4

1 に答える 1

0

投稿はかなり古いですが、私は上記のコードを利用しただけで、他の誰かがそれを必要とする場合に備えて私のソリューションを共有したかったのです:

public MainWindow()
{
  InitializeComponent();

  this.SizeChanged += new SizeChangedEventHandler(MainWindow_SizeChanged);
}

void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e)
{
  var midValueConverter = new MidValueConverter();

  double left = (double)midValueConverter.Convert(new object[] { cnvMain2.ActualWidth, tbSize2.ActualWidth }, typeof(double), null, Thread.CurrentThread.CurrentCulture);
  Canvas.SetLeft(tbSize2, left);

  double top = (double)midValueConverter.Convert(new object[] { cnvMain2.ActualHeight, tbSize2.ActualHeight }, typeof(double), null, Thread.CurrentThread.CurrentCulture);
  Canvas.SetTop(tbSize2, top);

}
于 2011-12-05T14:58:58.920 に答える