大家好。 首先,我为我的语言语法感到抱歉,因为我的第一语言是波斯语(伊朗)。我创建了一个具有一系列效果的按钮,当 WPF 窗口打开时,这些效果可以正常工作。但是,当 PreviewMouseLeftButtonUp 事件完成并打开 Openfiledialog 窗口时,该按钮将保持焦点模式(IsMouseOver 属性保持 EnterActions 模式)。当我将按钮的焦点转移到另一个控件时,IsMouseOver 功能将保持 ExitActions 模式。
https://pasteboard.co/JP6CMpt.gif
我希望按钮的工作方式与窗口第一次打开时完全相同,并且没有焦点控制。
<Storyboard x:Key="ButtonMouseEnter" AutoReverse="False" BeginTime="0:0:0" SpeedRatio="3">
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Button" Storyboard.TargetProperty="Background">
<DiscreteObjectKeyFrame KeyTime="0:0:0.0">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#e9f1cc" Offset="0"/>
<GradientStop Color="#cbd3ae" Offset="0.5"/>
<GradientStop Color="#858d68" Offset="1"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.1">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#dfe7c2" Offset="0"/>
<GradientStop Color="#c8d0ab" Offset="0.5"/>
<GradientStop Color="#8f9772" Offset="1"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.2">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#d5ddb8" Offset="0"/>
<GradientStop Color="#c5cda8" Offset="0.5"/>
<GradientStop Color="#99a17c" Offset="1"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.3">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#cbd3ae" Offset="0"/>
<GradientStop Color="#c2caa5" Offset="0.5"/>
<GradientStop Color="#a3ab86" Offset="1"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.4">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#c1c9a4" Offset="0"/>
<GradientStop Color="#bfc7a2" Offset="0.5"/>
<GradientStop Color="#adb590" Offset="1"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.5">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#b7bf9a" Offset="0"/>
<GradientStop Color="#bcc49f" Offset="0.5"/>
<GradientStop Color="#b7bf9a" Offset="1"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.6">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#adb590" Offset="0"/>
<GradientStop Color="#b9c19c" Offset="0.5"/>
<GradientStop Color="#c1c9a4" Offset="1"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.7">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#a3ab86" Offset="0"/>
<GradientStop Color="#b6be99" Offset="0.5"/>
<GradientStop Color="#cbd3ae" Offset="1"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.8">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#99a17c" Offset="0"/>
<GradientStop Color="#b3bb96" Offset="0.5"/>
<GradientStop Color="#d5ddb8" Offset="1"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.9">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#8f9772" Offset="0"/>
<GradientStop Color="#b0b893" Offset="0.5"/>
<GradientStop Color="#dfe7c2" Offset="1"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:1.0">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#858d68" Offset="0"/>
<GradientStop Color="#adb590" Offset="0.5"/>
<GradientStop Color="#e9f1cc" Offset="1"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="ButtonMouseLeave" AutoReverse="False" BeginTime="0:0:0" SpeedRatio="3">
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Button" Storyboard.TargetProperty="Background">
<DiscreteObjectKeyFrame KeyTime="0:0:0.0">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#e9f1cc" Offset="1"/>
<GradientStop Color="#adb590" Offset="0.5"/>
<GradientStop Color="#858d68" Offset="0"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.1">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#dfe7c2" Offset="1"/>
<GradientStop Color="#b0b893" Offset="0.5"/>
<GradientStop Color="#8f9772" Offset="0"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.2">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#d5ddb8" Offset="1"/>
<GradientStop Color="#b3bb96" Offset="0.5"/>
<GradientStop Color="#99a17c" Offset="0"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.3">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#cbd3ae" Offset="1"/>
<GradientStop Color="#b6be99" Offset="0.5"/>
<GradientStop Color="#a3ab86" Offset="0"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.4">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#c1c9a4" Offset="1"/>
<GradientStop Color="#b9c19c" Offset="0.5"/>
<GradientStop Color="#adb590" Offset="0"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.5">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#b7bf9a" Offset="1"/>
<GradientStop Color="#bcc49f" Offset="0.5"/>
<GradientStop Color="#b7bf9a" Offset="0"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.6">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#adb590" Offset="1"/>
<GradientStop Color="#bfc7a2" Offset="0.5"/>
<GradientStop Color="#c1c9a4" Offset="0"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.7">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#a3ab86" Offset="1"/>
<GradientStop Color="#c2caa5" Offset="0.5"/>
<GradientStop Color="#cbd3ae" Offset="0"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.8">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#99a17c" Offset="1"/>
<GradientStop Color="#c5cda8" Offset="0.5"/>
<GradientStop Color="#d5ddb8" Offset="0"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:0.9">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#8f9772" Offset="1"/>
<GradientStop Color="#c8d0ab" Offset="0.5"/>
<GradientStop Color="#dfe7c2" Offset="0"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:1.0">
<DiscreteObjectKeyFrame.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#858d68" Offset="1"/>
<GradientStop Color="#cbd3ae" Offset="0.5"/>
<GradientStop Color="#e9f1cc" Offset="0"/>
</LinearGradientBrush>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
<Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
<Setter Property="BorderBrush" Value="#FF707070" />
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Width="69" Background="{StaticResource NormalBackground}"
BorderBrush="#d2d8ca" BorderThickness="0.6" CornerRadius="15" x:Name="Button">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" RecognizesAccessKey="True"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Trigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource ButtonMouseEnter}"/>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource ButtonMouseLeave}"/>
</Trigger.ExitActions>
</Trigger>
<Trigger Property="IsFocused" Value="true">
<Trigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource ButtonMouseEnter}"/>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource ButtonMouseLeave}"/>
</Trigger.ExitActions>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
{
Keyboard.ClearFocus();
System.Windows.Forms.OpenFileDialog OpenFileDialog = new System.Windows.Forms.OpenFileDialog();
OpenFileDialog.AutoUpgradeEnabled = false;
if (App.EnumLanguage.Equals(AllLanguage.English))
{
OpenFileDialog.Title = "Selecting Image";
}
else
{
OpenFileDialog.Title = "انتخاب تصویر";
}
OpenFileDialog.Filter = "JPG(*.jpg)|*.jpg|BMP(*.bmp)|*.bmp|GIF(*.gif)|*.gif|PNG(*.png)|*.png|All Files|*.*";
OpenFileDialog.ShowDialog();
if (OpenFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
var IMG = System.Drawing.Image.FromFile(OpenFileDialog.FileName);
BM = new BitmapImage(new Uri(OpenFileDialog.FileName));
BitmapImage BitMapImage = new BitmapImage();
BitMapImage.BeginInit();
System.IO.MemoryStream MemoryStream = new System.IO.MemoryStream();
IMG.Save(MemoryStream, System.Drawing.Imaging.ImageFormat.Bmp);
MemoryStream.Seek(0, System.IO.SeekOrigin.Begin);
BitMapImage.StreamSource = MemoryStream;
BitMapImage.EndInit();
MemberImage.Source = BitMapImage;
OpenFileDialog.Dispose();
}
}
谢谢
Note:此问题总结整理于: The 'ismouseover' attribute stays in 'enteractions/exitactions' mode , how do I change the focus of the button ? please note the image (GIF) that shows how it works.