我正在尝试按下时在按钮上实现外部发光效果。但是看起来我的代码不起作用。
错误
会员' 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();
};
}
答案 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
。