【发布时间】:2021-10-08 10:25:15
【问题描述】:
我正在使用 C# WPF 和 Blend for Visual Studio 2019。 我有一个按钮,点击后会从 SQL Server 数据库中获取数据。
此外,该按钮在 Blend 中有一个动画,将运行旋转 OnPreviewMouseDown。
但问题是当我单击按钮时,一瞬间动画正在运行,然后突然停止。
我认为这个问题是因为Click 事件上的按钮运行了一些代码,导致动画无法继续。
长话短说:在处理点击事件时,按钮的动画似乎不起作用。
XAML:
<Window.Resources>
<Storyboard x:Key="RotationBtn">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)" Storyboard.TargetName="Command4">
<EasingDoubleKeyFrame KeyTime="0:0:1" Value="720"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
<Window.Triggers>
<EventTrigger RoutedEvent="UIElement.PreviewMouseDown" SourceName="Command4">
<BeginStoryboard x:Name="RotationBtn_BeginStoryboard" Storyboard="{StaticResource RotationBtn}"/>
</EventTrigger>
</Window.Triggers>
<Grid>
<Button x:Name="Command4" Content="Next Stage" Margin="599,406,304,84" Width="130" Height="37" FontSize="8" Click="Command4_Click" Background="#FFDDDDDD" BorderBrush="{x:Null}" RenderTransformOrigin="0.5,0.5">
<Button.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Button.RenderTransform>
</Button>
</Grid>
CS 代码:
private void Command4_Click(object sender, RoutedEventArgs e)
{
var MyQuery = dbms.Database.SqlQuery<DB_Cust>("SELECT * FROM Customers").ToList();
}
我尝试了什么:
第一次尝试
private void Command4_Click(object sender, RoutedEventArgs e)
{
Thread trd = new Thread(() =>
{
Dispatcher.Invoke((Action)(() =>
{
Storyboard sb = TryFindResource("RotationBtn") as Storyboard;
Storyboard.SetTarget(sb, Command4 );
sb.Begin();
}));
});
var MyQuery = dbms.Database.SqlQuery<DB_Cust>("SELECT * FROM Customers").ToList();
}
第二次尝试
private void Command4_Click(object sender, RoutedEventArgs e)
{
new Thread(() =>
{
App.Current.Dispatcher.Invoke((Action)delegate
{
Storyboard sb = TryFindResource("RotationBtn") as Storyboard;
Storyboard.SetTarget(sb, Command4);
sb.Begin();
});
}).Start();
var MyQuery = dbms.Database.SqlQuery<DB_Cust>("SELECT * FROM Customers").ToList();
}
【问题讨论】:
-
除了没有名为 RectangleSlider 的资源之外,运行一个立即调用 Dispatcher.Invoke 的 Thread 是没有意义的。直接启动 Storyboard 即可。
-
对不起,我的问题说明中有错误我更新了我的问题仍然没有工作请再次检查