2013-01-08 3 views
2

У меня две границы в Grid в UserControl. Первая граница находится в строке 1, а вторая граница находится в строке 2.ActualHeight/Actual Ширина границы не так, как ожидается при динамическом связывании

<UserControl> 
    <Grid Height="100"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="{Binding RowOneLength}" /> 
      <RowDefinition Height="{Binding RowTwoLength}" /> 
     </Grid.RowDefinitions> 

     <Border x:Name="Border1" Grid.Row="0">      
     </Border> 
     <Border x:Name="Border2" Grid.Row="1">      
     </Border> 
    </Grid> 
</UserControl> 

Я динамически связываю значения для определения строк, чтобы высота границы также соответствовала высоте строки.

Когда я создаю объект этого UserControl из ViewModel и вызываю метод в его коде позади, я не получаю исходную высоту границ (что я ожидаю, это значение, данное мной), и оно показывает половину длины сетки высота для обеих границ. Через некоторое время размер границы изменится на то, что я ожидаю.

Я хочу получить правильные значения с самого начала. Что я могу сделать, чтобы добиться такого поведения?

public void SetImagesForNewPattern(int val1, int val2) 
{ 
    this.Loaded += (sender, e) => 
    { 
     var len1 = Border1.ActualHeight+Border1.ActualWidth; 
     var len2 = Border2.ActualHeight+Border2.ActualWidth;    
    } 
} 

Это мой метод позади кода. Этот метод вызывается из моего ViewModel. Я получаю точную фактическую ширину & высота только после границы SizeChanged событие.

+0

Когда вы выполняете код позади? Возможно, UserControl полностью не отображается при выполнении кода. Было бы полезно, если бы вы добавили код в свой вопрос. – MatthiasG

+0

@MatthiasG привет, я обновил свой вопрос с кодом позади. сообщите мне, если вы найдете что-нибудь полезное для ответа – asitis

ответ

1

В соответствии с this msdn article a UserControl не создается, когда возникает событие Loaded.

Вы можете использовать SizeChanged событие из UserControl или Border случаев, но это означало бы пересчитать значение в несколько раз, как по размерам будут меняться во время измерения и визуализаций UserControl.