我在WPF中創建了一個彈出窗口,它顯示並隱藏了500毫秒的淡出動畫。在彈出窗口動畫運行時WPF窗口消息未觸發
當TextBox控件的PreviewMouseUp被觸發時彈出顯示,並且當TextBox的焦點丟失時隱藏。
問題是,如果我有兩個這些文本框,彈出窗口的動畫似乎阻止所有窗口消息發送到主窗口,而動畫正在進行。第二個TextBox的PreviewMouseUp僅在第一個TextBox的Popup的動畫完成後才被觸發。
有沒有辦法讓彈出窗口的淡入淡出動畫不會在動畫運行時阻塞窗口消息?
示例XAML文件:
<Window x:Class="WpfApplication4.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">
<Grid>
<TextBox HorizontalAlignment="Left" Height="23" Margin="22,26,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" PreviewMouseUp="TextBox_PreviewMouseUp_1" LostFocus="TextBox_LostFocus_1"/>
<TextBox HorizontalAlignment="Left" Height="23" Margin="22,54,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" PreviewMouseUp="TextBox_PreviewMouseUp_1" LostFocus="TextBox_LostFocus_1"/>
</Grid>
</Window>
示例代碼文件:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication4
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void TextBox_PreviewMouseUp_1(object sender, MouseButtonEventArgs e)
{
Popup p = new Popup();
p.Width = 100;
p.Height = 100;
p.Placement = PlacementMode.Left;
p.PlacementTarget = (TextBox)sender;
p.Child = new Border();
p.IsOpen = true;
((TextBox)sender).Tag = p;
}
private void TextBox_LostFocus_1(object sender, RoutedEventArgs e)
{
Popup p = (Popup)((TextBox)sender).Tag;
DoubleAnimation anim = new DoubleAnimation(100, 0, new Duration(new TimeSpan(0, 0, 1)));
p.BeginAnimation(WidthProperty, anim);
}
}
}
如果快速單擊文本框都,您注意到其他的彈出窗口將不會出現(與文本不獲得焦點),而動畫正在運行。
到目前爲止,我發現的情況是,如果動畫是非常密集的(高幀率),窗口消息將被阻止,直到動畫完成。如果我將應用程序幀率設置爲較低的值,例如30FPS,那麼問題就會消失。但對我來說這不是一種選擇,因爲我不希望動畫儘可能流暢。
我幾乎可以肯定,動畫不會阻止任何窗口消息。你的問題似乎是另一回事,你能提供一個你的問題的小例子嗎? – dowhilefor 2013-04-07 20:29:48
我的項目是相當大的..必須創建一個較小的例子然後..但現在不得不去睡覺 - 明天會發布。 – Jaska 2013-04-07 20:32:09
好吧,我剛剛發佈了一個例子 – Jaska 2013-04-07 20:47:33