我正在尝试创建一个像按钮一样的自定义用户控件,但我希望它为每个状态使用不同的图像(正常,悬停,按下)。用户控件包含一个用于显示图像的Image控件。我想在运行时更改Image控件的Source,所以当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的工作方式有点不同但是我怎么能得到这个按照我的方式工作?
由于
答案 0 :(得分:0)
我是以更加WPF风格的方式做到的。 我创建了3个图像源属性,并为每个属性创建了一个DependencyProperty。我还在我的xaml代码中添加了3个Image控件,并使用他们的注册名称DependencyProperty将这些imagesource属性绑定到我的图像控件的imagesource属性。然后,这只是隐藏图像或将图像设置为正确状态的问题。