1

ボタンのように機能するカスタムユーザーコントロールを作成しようとしていますが、状態(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では動作方法が少し異なることはわかっていますが、これをどのように動作させることができますかやってみますか?

ありがとう

4

1 に答える 1

0

私はもっ​​とWPFスタイルの方法でそれをしました。3つの画像ソースプロパティを作成し、それぞれにDependencyPropertyを作成しました。また、xamlコードに3つの画像コントロールを追加し、それらの画像ソースプロパティを、それらの登録名をDependencyPropertyとして使用して画像コントロールのimagesourceプロパティにバインドしました。次に、画像を非表示にするか、正しい状態で表示できるように設定するだけです。

于 2012-06-21T21:18:22.323 に答える