我有以下示例代码,可以在每次按下按钮时进行zoom :

XAML:

<Window x:Class="WpfApplication12.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">

    <Canvas x:Name="myCanvas">

        <Canvas.LayoutTransform>
            <ScaleTransform x:Name="myScaleTransform" />
        </Canvas.LayoutTransform> 

        <Button Content="Button" 
                Name="myButton" 
                Canvas.Left="50" 
                Canvas.Top="50" 
                Click="myButton_Click" />
    </Canvas>
</Window>

*.cs

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void myButton_Click(object sender, RoutedEventArgs e)
    {
        Console.WriteLine("scale {0}, location: {1}", 
            myScaleTransform.ScaleX,
            myCanvas.PointToScreen(GetMyByttonLocation()));

        myScaleTransform.ScaleX =
            myScaleTransform.ScaleY =
            myScaleTransform.ScaleX + 1;
        
        Console.WriteLine("scale {0}, location: {1}",
            myScaleTransform.ScaleX,
            myCanvas.PointToScreen(GetMyByttonLocation()));
    }
    
    private Point GetMyByttonLocation()
    {
        return new Point(
            Canvas.GetLeft(myButton),
            Canvas.GetTop(myButton));
    }
}

输出为:

scale 1, location: 296;315
scale 2, location: 296;315

scale 2, location: 346;365
scale 3, location: 346;365

scale 3, location: 396;415
scale 4, location: 396;415

正如你所见,有一个问题,我想用Application.DoEvents();解决,但是...它在a priori中不存在.第四网.

怎么办?

推荐答案

旧的应用程序.DoEvents()方法在WPF中已被弃用,转而使用DispatcherBackground Worker Thread来进行您所描述的处理.有关如何使用这两个对象的几篇文章,请参见链接.

如果你一定要使用应用程序.DoEvents(),则可以简单地导入系统.windows .形式.dll,并调用该方法.然而,这并不推荐,因为你正在失go WPF提供的所有优势.

.net相关问答推荐

API响应返回null错误. NET MAUI

Blazor服务器应用程序需要在页面上点击才能与元素交互

SetupSet() 已过时.代替什么?

xunit Assert.ThrowsAsync() 不能正常工作?

如何创建 LINQ to SQL 事务?

抛出 ArgumentNullException

我可以从 .NET/C# 获取其他进程的命令行参数吗?

HttpClient 和使用代理 - 不断得到 407

支持 HTTPS 的 Httplistener

如果需要,将方案添加到 URL

为什么 .NET 中不需要 Maven?

如何将 WebResponse.GetResponseStream 返回转换为字符串?

C# - 你如何停止计时器?

.NET 中的对象引用有多大?

如何使用 EPPlus 设置 XLSX 单元格宽度?

如何获取当前的 ProcessID?

在 C# 中使用 Bitmap 对象查找图像格式

表单不响应 KeyDown 事件

嵌套捕获组如何在正则表达式中编号?

什么时候使用 Tuple 和 KeyValuePair 比较好?