2010-01-11 3 views
0

Я нашел этот ресурс Centering On Canvas. Но проблема в том, что я не могу использовать одно и то же с помощью C#, потому что слева и верхние значения возвращают ноль и бросают исключение. Я не буду размещать элементы на холсте через xaml, поэтому как я могу использовать C# для реализации этого. Пожалуйста помоги.WPF Центрирующие элементы на холсте с помощью кода

<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

Пожалуйста, пост содержательной XAML со всеми упомянутыми элементами и ресурсы на месте или даже лучше просто урезать пример того, чего вы пытаетесь достичь. –

+0

Я заставлю Станислава. Что пытается сосредоточиться там? – arconaut

+0

Я пытаюсь центрировать прямоугольник в этом случае (фактически факт любого объекта). –

ответ

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

} 

 Смежные вопросы

  • Нет связанных вопросов^_^