WPF-触发事件不起作用



我正在尝试在按下按钮上的外部发光效果。但是,我的代码似乎不起作用。

错误

不识别或可访问的成员"样式"

XAML

<menu:HomeButton 
        x:Name="BtnHome" 
        PreviewMouseDown="BtnHome_PreviewMouseDown"
        TouchDown="BtnHome_TouchDown">
        <Button.Style>
          <Style TargetType="Button">
            <Style.Triggers>
              <Trigger Property="IsPressed" Value="true">
                <Setter Property="Effect">
                  <Setter.Value>
                    <DropShadowEffect BlurRadius="20" ShadowDepth="0" Color="DarkBlue"/>
                  </Setter.Value>
                </Setter>    
              </Trigger>
            </Style.Triggers>
          </Style>
        </Button.Style>

注意:HomeBatton是为图像菜单创建的自定义类任何想法如何解决?

编辑:以下是home button类:

public partial class HomeButton : UserControl, ILocale, IDisposable
{
    public HomeButton()
    {
        InitializeComponent();
        UpdateContentResource();
        this.btnHome.Click += (s, e) =>
        {
            KioskSession.BlockEvent(true);
                Debug.WriteLine("Customer click Home button - Return to Home ");
            MainContentSwitcher.Instance.MoveToHome();
        };
    }

HomeButton不是 Button。而不是设置<Button.Style>,而是使用以下方式:

<menu:HomeButton 
    x:Name="BtnHome" 
    PreviewMouseDown="BtnHome_PreviewMouseDown"
    TouchDown="BtnHome_TouchDown">
    <menu:HomeButton.Style>
      <Style TargetType="menu:HomeButton">
        <Style.Triggers>
          <Trigger Property="IsPressed" Value="true">
            <Setter Property="Effect">
              <Setter.Value>
                <DropShadowEffect BlurRadius="20" ShadowDepth="0" Color="DarkBlue"/>
              </Setter.Value>
            </Setter>    
          </Trigger>
        </Style.Triggers>
      </Style>
    </menu:HomeButton.Style>
    ...
</menu:HomeButton>

但是,请注意,由于HomeButton不是按钮,因此您必须从标准按钮继承,或者实现自己的ISPARDESSEDERSSEDIND依赖性属性,这应该是琐碎的(使用Mousedown和MouseUp)。

我建议您仅从Button而不是UserControl继承。查看您正在对按下状态的效果,很明显,您想将其用作Button

编辑

解决您的困惑,请注意,用户控件的XAML和代码始终应始终匹配。如果您的用户控制说它从Button继承,则应在两个地方说这一点。目前,HomeButton类并非如此,因为它在XAML中宣布为Button,而在代码范围内将其称为UserControl。要解决问题,请从以下方式更改HomeButton的定义:

public partial class HomeButton : UserControl, ILocale, IDisposable

to:

public partial class HomeButton : Button, ILocale, IDisposable

一切都会开始正确地工作。

HomeButton应定义为自定义Buttom,而不是UserControl

public class HomeButton : Button, ILocale, IDisposable
{
    public HomeButton()
    {
        UpdateContentResource();
        this.Click += (s, e) =>
        {
            KioskSession.BlockEvent(true);
            Debug.WriteLine("Customer click Home button - Return to Home ");
            MainContentSwitcher.Instance.MoveToHome();
        };
    }
}

<menu:HomeButton 
    x:Name="BtnHome" 
    PreviewMouseDown="BtnHome_PreviewMouseDown"
    TouchDown="BtnHome_TouchDown">
    <menu:HomeButton.Style>
        <Style TargetType="menu:HomeButton">
            <Style.Triggers>
                <Trigger Property="IsPressed" Value="true">
                    <Setter Property="Effect">
                        <Setter.Value>
                            <DropShadowEffect BlurRadius="20" ShadowDepth="0" Color="DarkBlue"/>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </menu:HomeButton.Style>
</menu:HomeButton>

UserControl没有IsPressed属性,因此您不能将Style应用于UserControl

最新更新