Центрирующие элементы WPF на холсте с помощью кода - PullRequest
0 голосов
/ 11 января 2010

Я нашел этот ресурс Центрирование на холсте . Но проблема в том, что я не могу использовать то же самое с помощью C #, потому что левые и верхние значения canvas возвращают ноль и выдают исключение. Не всегда я помещаю элементы на canvas через 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>

1 Ответ

0 голосов
/ 05 декабря 2011

Хотя пост довольно старый, я просто воспользовался приведенным выше кодом и хотел поделиться своим решением на тот случай, если кому-то еще понадобится:

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

}
...