WPF - 触发器事件不起作用

时间:2017-12-18 04:06:57

标签: c# wpf xaml

我正在尝试按下时在按钮上实现外部发光效果。但是看起来我的代码不起作用。

错误

  

会员' Style'无法识别或访问

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>

注意:HomeButton是为图像菜单创建的自定义类,它响应被单击的按钮 知道如何解决这个问题吗?

编辑: 以下是HomeButton类:

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();

        };
    }

2 个答案:

答案 0 :(得分:3)

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不是Button,因此您必须继承标准Button或实现自己的IsPressed依赖项属性,这应该是微不足道的(使用MouseDown和MouseUp)。

我建议您只是继承Button而不是UserControl。看一下您对元素的按下状态应用效果的事实,很明显您要将其用作Button

修改

解决您的困惑,请注意用户控件的XAML和代码隐藏应始终匹配。如果您的用户控件说它继承自Button,则应该在两个地方都说明。目前,HomeButton类不是这种情况,因为它在XAML中声明为Button,在代码隐藏中声明为UserControl。要解决此问题,请更改HomeButton的定义:

public partial class HomeButton : UserControl, ILocale, IDisposable

为:

public partial class HomeButton : Button, ILocale, IDisposable

一切都会正常开始。

答案 1 :(得分:1)

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