wpf界面如何像浏览器那样ctrl+滚轮放大 缩小界面元素

hello 20 信誉分
2024-07-12T05:29:32.7233333+00:00

wpf界面如何像浏览器那样ctrl+滚轮放大 缩小界面元素

Windows Presentation Foundation
Windows Presentation Foundation
.NET Framework 的一部分,它提供统一的编程模型,用于在 Windows 上构建业务线桌面应用程序。
131 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Hui Liu-MSFT 48,586 信誉分 Microsoft 供应商
    2024-07-12T08:31:40.46+00:00

    你好,@hello. 你可以参考下面的代码捕获 Ctrl + 滚轮 事件并相应地调整界面元素的大小来实现类似浏览器的放大和缩小功能。

    XAML 部分:

    创建一个 ScrollViewer,以便在缩放后内容仍然可以滚动查看。 在 ScrollViewer 内部创建一个 Grid,其中包含一个 TextBlock 显示提示文本。

    C# 部分:

    注册 PreviewMouseWheel 事件,捕获鼠标滚轮事件。 检查 Ctrl 键是否被按下 (Keyboard.IsKeyDown(Key.LeftCtrl) 或 Keyboard.IsKeyDown(Key.RightCtrl))。 根据滚轮的方向 (e.Delta > 0 或 e.Delta < 0)调整 _currentScale 的值。 将新的缩放值应用到 Grid 的 LayoutTransform 上。

    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
    
         <Grid x:Name="MainGrid">
    
             <TextBlock Text="Zoom in and out with Ctrl + Mouse Wheel" FontSize="16" 
    
                            HorizontalAlignment="Center" VerticalAlignment="Center"/>
    
         </Grid>
    
     </ScrollViewer>
    
    

    codebehind:

    public partial class MainWindow : Window
    {
        private double _currentScale = 1.0;
    
        public MainWindow()
        {
            InitializeComponent();
            this.PreviewMouseWheel += MainWindow_PreviewMouseWheel;
        }
    
        private void MainWindow_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
        {
            if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
            {
                if (e.Delta > 0)
                {
                    _currentScale += 0.1;
                }
                else if (e.Delta < 0)
                {
                    _currentScale -= 0.1;
                }
    
                if (_currentScale < 0.1)
                {
                    _currentScale = 0.1;
                }
    
                ScaleTransform scaleTransform = new ScaleTransform(_currentScale, _currentScale);
                MainGrid.LayoutTransform = scaleTransform;
            }
        }
    }
        
    
    
    

    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    1 个人认为此答案很有帮助。

0 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。