2

私のプログラムでは、(MouseEnter イベント) 特定の UserControl (ここでは TransportOrderLineUserControl を使用) にカーソルを合わせると、TransportOrderLineDetailView が表示されます。

TransportOrderLineDetailView は画面の右下に配置する必要があります。このためには、正しい配置のために ActualWidth と ActualHeight を知る必要があります。これら 2 つのプロパティは 0 以外の値を持つ必要があるため、このコードを DetailView.Loaded イベントで実行します。

他の 2 つのオブジェクトについてもまったく同じ方法を使用します。そこでは機能しますが、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");
        }
    }
    
  • 詳細コンテンツ プレゼンター:

     <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
    }
4

1 に答える 1