В моей программе, когда я навешиваю (событие 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
}
Я уже провел некоторое исследование, и там они говорят, что это потому, что InitializeComponent(); не написано. Но, как вы можете видеть, это реализовано в моем коде. –
Я не уверен, но я предполагаю, что когда событие Loaded запущено, пользовательский интерфейс еще не измерен/не установлен ...? – Steve