コード例 #1
0
        private void scrollViewerPreviewMouseWheel(object sender, MouseWheelEventArgs e)
        {
            System.Windows.Point mouseAtImage        = e.GetPosition(viewport);
            System.Windows.Point mouseAtScrollViewer = e.GetPosition(scrollViewer);

            ScaleTransform st = viewport.LayoutTransform as ScaleTransform;

            if (st == null)
            {
                st = new ScaleTransform();
                viewport.LayoutTransform = st;
            }

            if (e.Delta > 0)
            {
                st.ScaleX = st.ScaleY = st.ScaleX * 1.25;
                if (st.ScaleX > 64)
                {
                    st.ScaleX = st.ScaleY = 64;
                }
            }
            else
            {
                st.ScaleX = st.ScaleY = st.ScaleX / 1.25;
                if (st.ScaleX < 1)
                {
                    st.ScaleX = st.ScaleY = 1;
                }
            }
            #region [this step is critical for offset]
            scrollViewer.ScrollToHorizontalOffset(0);
            scrollViewer.ScrollToVerticalOffset(0);
            window.UpdateLayout();
            #endregion

            Vector offset = viewport.TranslatePoint(mouseAtImage, scrollViewer) - mouseAtScrollViewer;
            scrollViewer.ScrollToHorizontalOffset(offset.X);
            scrollViewer.ScrollToVerticalOffset(offset.Y);
            window.UpdateLayout();

            e.Handled = true;
        }