'ismouseover'属性停留在'enteractions/exitactions'模式,如何更改按钮的焦点?请注意显示其工作原理的图像(GIF)

匿名
2024-05-31T08:39:40.5033333+00:00

大家好。 首先,我为我的语言语法感到抱歉,因为我的第一语言是波斯语(伊朗)。我创建了一个具有一系列效果的按钮,当 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.

开发人员技术 | Windows Presentation Foundation
开发人员技术 | C#
开发人员技术 | C#
一种面向对象的类型安全的编程语言,它起源于 C 语言系列,包括对面向组件的编程的支持。
0 个注释 无注释
{count} 票

问题作者接受的答案
  1. Hui Liu-MSFT 48,711 信誉分 Microsoft 外部员工
    2024-05-31T09:29:22.8866667+00:00

    在第 29 行和第 30 行之间插入以下代码:

    var scope = FocusManager.GetFocusScope(sender as Button);   
    FocusManager.SetFocusedElement(scope, null);   
    Keyboard.ClearFocus();  
    

    并在问题的第一代码部分的第 224 行和第 225 行之间添加。<Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}}"></Setter> 70961-2.gif


    如果回复有帮助,请点击“接受答案”并点赞。 注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。

    1 个人认为此答案很有帮助。
    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

提问者可以将答案标记为“已接受”,版主可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。