2014-02-18 60 views
1

在我的程序中,當我將鼠標懸停在(MouseEnter事件)某個UserControl(此處使用TransportOrderLineUserControl)時,應顯示一個TransportOrderLineDetailView。WPF UserControl.Loaded事件不會觸發

TransportOrderLineDetailView應該放在我的屏幕的右下角。爲此,我需要知道ActualWidth & ActualHeight以獲得正確的位置。因爲這兩個屬性需要具有不同於0的值,所以我使用DetailView.Loaded事件執行此代碼。

我對兩個其他對象使用完全相同的方式。它有效,但不適用於TransportOrderLineDetailView。在產生圖

代碼:

TransportOrderLineDetailView tolDetailView = new TransportOrderLineDetailView(new TransportOrderLineDetailViewModel(transportOrderLine)); 
window.DetailContent = tolView; 
tolView.Loaded += SetDetailViewOnUI; 

代碼隱藏視圖:

public TransportOrderLineDetailView(TransportOrderLineDetailViewModel detailViewModel) 
    { 
     InitializeComponent(); 
     DataContext = detailViewModel; 
    } 

方法SetDetailViewOnUI:

private void SetDetailPanelOnUI(object sender, EventArgs e) 
    { 
     Canvas.SetLeft(window.DetailContentPresenter, 
            window.grid_Root.ActualWidth - window.DetailContentPresenter.ActualWidth); 
     Canvas.SetTop(window.DetailContentPresenter, 
         window.grid_Root.ActualHeight - window.DetailContentPresenter.ActualHeight); 
    } 

實施例,其中它工作得很好:

DriverDetailView driverDetailView = new DriverDetailView(new DriverDetailViewModel(driver)); 
window.DetailContent = driverDetailView; 
driverDetailView.Loaded += SetDetailPanelOnUI; 

更多信息

  • window.DetailContent:

    private UserControl detailContent; 
    
    public UserControl DetailContent 
    { 
        get { return this.detailContent; } 
        set 
        { 
         this.detailContent = value; 
         OnPropertyChanged("DetailContent"); 
        } 
    } 
    
  • DetailContentPresenter:

    <Canvas Grid.RowSpan="2" x:Name="canvas_Popup_DetailView"> 
        <ContentPresenter Content="{Binding DetailContent}" x:Name="detailContentPresenter"/> 
    </Canvas> 
    

甲測試,其中加載的事件還沒有被觸發:

public TransportOrderLineDetailView(TransportOrderLineDetailViewModel detailViewModel) 
    { 
     InitializeComponent(); 

     DataContext = detailViewModel; 
     this.Loaded += test; //Test here 
    } 

    private void test(object sender, System.Windows.RoutedEventArgs e) 
    { 
// method never executed 
    } 
+0

我已經做了一些研究,他們說這是因爲InitializeComponent();不寫。但正如你所看到的,這是在我的代碼中實現的。 –

+0

我不確定,但我猜測,當Loaded事件被觸發時,UI尚未被測量/排列......? – Steve

回答

1

找到解決方案。 有一個錯誤沒有引發。

我是怎麼找到它在Visual Studio中進行調試 - >例外 - >勾選可能出現的異常。

希望這能幫助其他人解決同樣的問題。 :)

+0

你得到了什麼異常? – Moumit