我试图创建一个自定义的用户控件,它像一个按钮,但我希望它为每个状态使用不同的图像(正常,悬停,按下)。用户控件包含一个Image控件以显示图像。我想在运行时更改图像控件的源代码,所以当OnMouseEnter事件触发时,我会将图像源更改为HoverChange(ImageSource)属性。自定义按钮与每个状态的图像
所以我试图添加3个ImageSource属性(NormalState,HoverState和PressedState)到usercontrol,所以我可以在需要时更改图像。 (来自WinForms)但问题是属性没有在代码中设置(WinForms行为),所以我不能将它们分配给我的图像。但是当我在我的程序中使用usercontrol时,我可以通过属性面板设置它们,但是我不能在代码中使用它们(它们保持为NULL)。
这里是我想要达成一些(伪)代码:
public partial class ThreeStateButton : UserControl
{
public enum ButtonState
{
Normal,
Hover,
Pressed
}
public ImageSource NormalState { get; set; }
public ImageSource HoverState { get; set; }
public ImageSource PressState { get; set; }
public ThreeStateButton()
{
InitializeComponent();
SetState(ButtonState.Normal);
}
public void SetState(ButtonState state)
{
switch (state)
{
case ButtonState.Normal:
imgButton.Source = NormalState;
break;
case ButtonState.Hover:
imgButton.Source = HoverState;
break;
case ButtonState.Pressed:
imgButton.Source = PressState;
break;
}
}
protected override void OnMouseEnter(MouseEventArgs e)
{
base.OnMouseEnter(e);
SetState(ButtonState.Hover);
}
protected override void OnMouseLeave(MouseEventArgs e)
{
base.OnMouseLeave(e);
SetState(ButtonState.Normal);
}
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
SetState(ButtonState.Pressed);
}
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
SetState(ButtonState.Hover);
}
}
的主要问题是,ImageSource的属性没有初始化设置后(当然也有通过属性设置面板在编辑器中),我知道WPF中的工作方式有点不同,但我怎么能按照我尝试的方式工作?
谢谢
您应该使用Visual状态在XAML中创建样式。这个问题可能有帮助。 http://stackoverflow.com/q/7839235/73804 – 0x4f3759df
代码会有帮助。 –