Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF通过代码将元素集中在画布上_Wpf_Canvas_Center - Fatal编程技术网

WPF通过代码将元素集中在画布上

WPF通过代码将元素集中在画布上,wpf,canvas,center,Wpf,Canvas,Center,我找到了这个资源。但问题是我不能通过C#使用相同的东西,因为画布左侧和顶部的值返回零并引发异常。我并不总是通过xaml将元素放置在画布上,所以我如何使用C#来实现这一点。请帮忙 <Canvas.Left> <MultiBinding Converter="{StaticResource MidValue}" ConverterParameter="1"> <Binding ElementName="cnvMain2"

我找到了这个资源。但问题是我不能通过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>

虽然这篇文章很老了,但我只是利用了上面的代码,并想分享我的解决方案,以防其他人需要它:

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

}

请发布有意义的xaml,并将所有引用的元素和资源都放在适当的位置,或者更好地只是简单地介绍一下您试图实现的目标。我将支持Stanislav。你想在哪里居中?我想在这个例子中居中一个矩形(事实上是任何物体)。我真的被卡住了。我想学习如何在C#中编写与上面相同的代码,以便使用中值资源将矩形居中。请帮忙。。。。