Запуск событий с событиями WPF - PullRequest
0 голосов
/ 28 августа 2010

Я хотел бы спроектировать системный интерфейс, в котором я поочередно анимирую (загораю или горю) различные элементы управления (прямоугольники) и отправляю сообщение в очередь по мере их анимации - я новичок в C # и wpf, поэтому не совсем Вы уверены, как подходить к этому - какие-либо отправные точки?

EDIT:

Спасибо за пример - хотя я и не до конца его понял, но у меня возникли следующие проблемы:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.ComponentModel;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    // public partial class MainWindow : Window
    //{
    //  public MainWindow()
    //{
    //  InitializeComponent();
    //DataContext = this;
    //}

    //}

    public class Glow : INotifyPropertyChanged
    {
        private double m_glowSize;
        public event PropertyChangedEventHandler PropertyChanged;
        public double GlowSize
        {
            get { return m_glowSize; }
            set
            {
                m_glowSize = value;
                NotifyPropertyChanged("GlowSize");
            }
        }
        public void Window()
        {
            InitializeComponent();
            DataContext = this;
        }

        private void Canvas_MouseMove(object sender, MouseEventArgs e)
        {
            Canvas canvas = sender as Canvas;
            if (canvas != null)
            {
                Point mousePosition = e.GetPosition(canvas);
                GlowSize = 20 * (mousePosition.X / canvas.ActualWidth);
            }
        }

        private void NotifyPropertyChanged(string s)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(s));
        }
    }
}

похоже, проблема в этом фрагменте:

  public void Window()
        {
            InitializeComponent();
            DataContext = this;
        }

что делает DataContext = this; и как мне правильно его настроить?

1 Ответ

2 голосов
/ 01 сентября 2010

Привет, Ричард, я отозвал свой предыдущий ответ и обновил этот новый, надеюсь, это имеет больше смысла. Дополнительно, пожалуйста, используйте опцию «комментировать», если вы хотите получить больше информации о предлагаемом ответе.

По сути, я просто добавил прямоугольник с эффектом свечения на холст, а затем привязал размер ореола к свойству, которым я манипулирую каждый раз, когда мышь перемещается над Canvas.

Обратите внимание, что для того, чтобы этот код работал в классе, необходимо реализовать интерфейс INotifyPropertyChanged, который находится в пространстве имен System.ComponentModel. Вам также необходимо убедиться, что текстовый текст окна установлен правильно.

Содержание моего Window XAML:

<Canvas Background="DarkGray"
        MouseMove="Canvas_MouseMove">
    <Rectangle Margin="40,40,0,0"
               Width="200"
               Height="200"
               Fill="Gray"
               Stroke="Black"
               StrokeThickness="2">
        <Rectangle.BitmapEffect>
            <OuterGlowBitmapEffect GlowColor="Goldenrod"
                                   GlowSize="{Binding Path=GlowSize}"/>
        </Rectangle.BitmapEffect>
    </Rectangle>
</Canvas>
</Window>

Код для моего окна:

public class Window1 : Window, INotifyPropertyChanged
{
    private double m_glowSize;
    public double GlowSize
    {
        get { return m_glowSize; }
        set
        {
            m_glowSize = value;
            NotifyPropertyChanged("GlowSize");
        }
    }

    public Window1() //this is my class constructor
    {
        DataContext = this;
        InitializeComponent();
    }  

    private void Canvas_MouseMove(object sender, MouseEventArgs e) 
    {
        Canvas canvas = sender as Canvas;
        if (canvas != null)
        {
            Point mousePosition = e.GetPosition(canvas);
            GlowSize = 20 * (mousePosition.X / canvas.ActualWidth);
        }
     }    

    private void NotifyPropertyChanged(string s)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(s));
    }
}

В качестве очень простой интерпретации DataContext вы можете рассматривать его как объект, с которым привязки будут искать свои связанные свойства. В этом случае мы хотим убедиться, что привязки в XAML нашего окна находятся в его коде позади файла.

Кроме того, если вы еще этого не сделали. Взгляните на это http://msdn.microsoft.com/en-us/library/aa970268.aspx

Мне было очень полезно, когда я только начал

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...