2014-02-18 4 views
1

В моей программе, когда я навешиваю (событие MouseEnter) определенное UserControl (здесь я использую TransportOrderLineUserControl), должен отображаться TransportOrderLineDetailView.Событие WPF UserControl.Loaded не запускается

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 
    } 
+0

Я уже провел некоторое исследование, и там они говорят, что это потому, что InitializeComponent(); не написано. Но, как вы можете видеть, это реализовано в моем коде. –

+0

Я не уверен, но я предполагаю, что когда событие Loaded запущено, пользовательский интерфейс еще не измерен/не установлен ...? – Steve

ответ

1

Обнаружено решение. Произошла ошибка, которая не была выбрана.

Как я обнаружил, что это происходит в Visual Studio для отладки -> Исключения -> Отметьте возможные исключения.

Надеюсь, это поможет другим людям, испытывающим проблемы с одним и тем же материалом. :)

+0

Какое исключение вы получили? – Moumit

Смежные вопросы