簡體   English   中英

WPF UserControl.Loaded事件不會觸發

[英]WPF UserControl.Loaded event does not trigger

在我的程序中,當我將鼠標懸停在(MouseEnter事件)上時,應顯示一個特定的UserControl(在這里使用TransportOrderLineUserControl),一個TransportOrderLineDetailView。

TransportOrderLineDetailView應該放置在屏幕的右下方。 為此,我需要知道一個正確的位置的ActualWidth&ActualHeight。 因為這2個屬性的值必須不同於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
    }

找到了解決方案。 有一個未引發的錯誤。

我如何找到它的方法是在Visual Studio中調試->異常->勾選可能的異常。

希望這會幫助其他人遇到同樣的問題。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM