2014-02-18 2 views
1

내 프로그램에서 특정 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

관련 문제