ボタンのように機能するカスタムユーザーコントロールを作成しようとしていますが、状態(Normal、Hover、Pressed)ごとに異なる画像を使用したいと思います。ユーザーコントロールには、画像を表示するための画像コントロールが含まれています。実行時に画像コントロールのソースを変更したいので、OnMouseEnterイベントがトリガーされたときに、画像ソースをHoverChange(ImageSource)プロパティに変更します。
そこで、3つのImageSourceプロパティ(NormalState、HoverState、PressedState)をユーザーコントロールに追加して、必要に応じて画像を変更できるようにしました。(WinFormsから取得)しかし、問題は、プロパティがコードで設定されていないため(WinFormsの動作)、画像にプロパティを割り当てることができないことです。しかし、プログラムでユーザーコントロールを使用する場合、プロパティパネルから設定できますが、コードでは使用できません(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では動作方法が少し異なることはわかっていますが、これをどのように動作させることができますかやってみますか?
ありがとう