0

我发现这个资源以 Canvas 为中心。但问题是我不能通过 C# 使用相同的东西,因为画布 left 和 top 值返回零并抛出异常。我并不总是会通过 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 回答