Gardes Asked:2020-10-10 19:17:23 +0000 UTC2020-10-10 19:17:23 +0000 UTC 2020-10-10 19:17:23 +0000 UTC 释放鼠标按钮后调整窗口大小 772 你好。如何使用鼠标按钮调整窗口大小而不是动态(即拖动时立即),但只有在释放它之后? ShowsPreview您需要元素上的属性之类的东西GridSplitter。Window没有找到类似的东西。 c# 1 个回答 Voted Best Answer VladD 2020-10-10T20:20:49Z2020-10-10T20:20:49Z 例如,您可以订阅窗口大小调整,并仅在窗口“平静下来”时手动设置内容大小。 最短的解决方案是通过 Rx 扩展获得的(通过 nuget安装 System.Reactive ): <Window x:Class="CustomNC.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Test" Height="350" Width="525"> <Grid Name="ClientArea"> <Grid Name="ContentHolder" HorizontalAlignment="Left" VerticalAlignment="Top"> <!-- тут ваш контент --> </Grid> </Grid> </Window> 和代码隐藏: public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Observable.FromEventPattern<SizeChangedEventArgs>(ClientArea, nameof(SizeChanged)) .Throttle(TimeSpan.FromSeconds(0.3)) .ObserveOnDispatcher() .Subscribe(args => { ContentHolder.Width = ClientArea.ActualWidth; ContentHolder.Height = ClientArea.ActualHeight; }); } } 结果: 在没有 Rx 的情况下,使用更平淡无奇的代码可以轻松实现相同的目的。在 XAML 中订阅SizeChanged: <Grid Name="ClientArea" SizeChanged="OnSizeChanged"> <Grid Name="ContentHolder" HorizontalAlignment="Left" VerticalAlignment="Top"> <!-- тут ваш контент --> </Grid> </Grid> 在代码隐藏中: Task currentWaitTask = null; async void OnSizeChanged(object sender, SizeChangedEventArgs e) { var waitTask = Task.Delay(TimeSpan.FromSeconds(0.3)); currentWaitTask = waitTask; await waitTask; if (currentWaitTask != waitTask) return; currentWaitTask = null; ContentHolder.Width = ClientArea.ActualWidth; ContentHolder.Height = ClientArea.ActualHeight; } 永恒经典爱好者的另一种变体,带有计时器但没有 TPL: public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); timer.Tick += (o, args) => { ContentHolder.Width = ClientArea.ActualWidth; ContentHolder.Height = ClientArea.ActualHeight; timer.Stop(); }; } DispatcherTimer timer = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(0.3) }; void OnSizeChanged(object sender, SizeChangedEventArgs e) { timer.Stop(); timer.Start(); } }
例如,您可以订阅窗口大小调整,并仅在窗口“平静下来”时手动设置内容大小。
最短的解决方案是通过 Rx 扩展获得的(通过 nuget安装 System.Reactive ):
和代码隐藏:
结果:
在没有 Rx 的情况下,使用更平淡无奇的代码可以轻松实现相同的目的。在 XAML 中订阅
SizeChanged:在代码隐藏中:
永恒经典爱好者的另一种变体,带有计时器但没有 TPL: