2013-01-08 33 views
2

我有一個GridUserControl中有兩個邊框。第一個邊框位於第一行,第二個邊框位於第二個位置。邊界的ActualHeight/ActualWidth與動態綁定時的預期不符

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

我動態地將值綁定到行定義,使邊框高度也適合行高。

當我從ViewModel創建此UserControl的對象並在其後面的代碼中調用一個方法時,我沒有得到邊框的原始高度(我期望的是我給出的值),它顯示了網格的一半長度兩邊的高度。一段時間後,邊界大小改變爲我所期望的。

我想從一開始就檢索正確的值。我能做些什麼來實現這種行爲?

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一個UserControl不會最終呈現Loaded事件時引發。

您可以使用SizeChanged事件UserControlBorder實例,但是這將意味着重新計算值測量和渲染UserControl期間幾次大小會發生變化。