Search code examples
mouseeventmousewheeleventhandlerhelix-3d-toolkiteventargs

Helix Toolkit How to use MouseWheelEventHandler to run specific methods in other classes


I would like to run particular methods of a custom Camera class whenever the user zooms in or out in the helix toolkit view that my program is running inside of. A key feature of this functionality is getting the mouseargs from the event so I can adjust the camera in a way that is proportional to the number of scroll ticks.

I began to try this:

    public event PropertyChangedEventHandler PropertyChanged;

    public virtual void onMouseWheeled(MouseDevice Mouse, int time, 
    MouseWheelEventArgs e) {
        MouseWheel?.Invoke(this, new MouseWheelEventArgs(Mouse, time, 
    e.Delta)); }

    //This next line goes in a MainWindow_Loaded method that gets called in the 
    //MainWindowConstructor

    void MainWindow_Loaded(object sender, RoutedEventArgs e) {
        view1.MouseWheel += new MouseWheelEventHandler(onMouseWheeled(Cursor, 
    Time.simTime, view1.MouseWheeledEventArgs)); }

but was having a lot of trouble figuring out how to pass a MouseWheelEventArgs object into the onMouseWheeled method when I'm trying to add the onMouseWheeled method to the MouseWheelEventHandler. Assuming nothing is fundamentally wrong with that sentence, which is nothing more than wishful thinking, The last thing I am trying to figure out is how to get mouse wheel event args so that I can pass it into a method.

Then I tried this:

    public event MouseWheelEventHandler MouseWheel;

    public virtual void onMouseWheeled(object sender, MouseWheelEventArgs e)
    {
        Console.WriteLine(e.Delta);
    }
    //In Main Window Loaded method...
    void MainWindow_Loaded(object sender, RoutedEventArgs e) 
    {
    view1.MouseWheel += onMouseWheeled;
    }

But I get no output when i scroll the wheel. I assumed this might actually work because view1 is the helix window I'm attaching all of my objects to, as children of view1.

Basically my main questions are:

What does invoke actually do? I only have this running to try to see if its working because onPropertyChanged methods I always use run the Invoke command like so. I'm actually not sure where I'm going with this.

How does the handler work?

How do the event args get called out so that I can use them and pass them as objects to other methods?

Thank you for your time. And Thank you twice for any and all pointers and advice you may give me.


Solution

  • Try to use preview mouse wheel event