3

MouseEventHandler を使用して Viewport3D をセットアップしました

[...]
Main3DWindow.MouseUp += new MouseButtonEventHandler(mainViewport_MouseUp);
[...]
void mainViewport_MouseUp (object sender, MouseButtonEventArgs e) {
    Point location = e.GetPosition(Main3DWindow);
    ModelVisual3D result = GetHitTestResult(location);
    if (result == null) {
        _CurrentData.Unselect();
        return;
    }
    _CurrentData.SelectItemFromObjectList(result);
}

そして、オブジェクトがクリックされると、かなりうまく機能します。私の期待は次のとおりです。オブジェクトがクリックされない場合 (ユーザーがバックグラウンドでクリックしたため)、結果は null になります。しかし、実際には mainViewport_MouseUp メソッドは呼び出されません。

私の質問: Viewport3D の背景でクリックを検出するにはどうすればよいですか?

4

1 に答える 1

3

あなたが書いた通り、それは解雇されません。

境界でイベントを定義し、ビューポートを境界に配置することで解決しました。サンプルは XAML からのものです。

<Border
                MouseWheel="mainViewport_MouseWheel"
                MouseMove="mainViewport_MouseMove"
                MouseLeftButtonDown="mainViewport_MouseLeftButtonDown"
                Background="Black">
                <Viewport3D
                    Name="mainViewport"
                    ClipToBounds="True"
                    Grid.Row="0"
                    Grid.Column="0"
                    Grid.ColumnSpan="3"
                    Margin="0,0,0,0">
.....
                </Viewport3D>
            </Border>

そしてコードで:

private void mainViewport_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    Point location = e.GetPosition(mainViewport);
    try
    {
                ModelVisual3D result = (ModelVisual3D)GetHitTestResult(location);
        //some code.......
    }
    catch
    {
        //some code .......
    }
}
于 2014-02-13T12:46:47.730 に答える