首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WPF事件触发事件

使用WPF事件触发事件
EN

Stack Overflow用户
提问于 2010-08-28 20:36:34
回答 1查看 430关注 0票数 0

我想设计一个系统界面,在那里我有不同的控件(矩形)动画(亮起或发光)一个接一个,并发送一个消息到一个队列,因为他们动画-我是新手的C#和wpf,所以不太确定如何探索这一点-任何起点?

编辑:

感谢你的例子-尽管我没有完全理解它,但我还是想出了以下几点,但仍然有一些问题:

代码语言:javascript
复制
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));
        }
    }
}

问题似乎出在这个块上:

代码语言:javascript
复制
  public void Window()
        {
            InitializeComponent();
            DataContext = this;
        }

DataContext = this;做了什么?我如何正确地设置它?

EN

回答 1

Stack Overflow用户

发布于 2010-09-01 15:56:40

嘿,理查德,我已经收回了我之前的答案,并更新了这个新的答案,希望它能更有意义。此外,如果您想了解有关建议答案的更多信息,请使用“注释”选项。

基本上,我只是在画布上添加了一个具有发光效果的矩形,然后将光晕的大小绑定到我每次鼠标移动到Canvas上时所操作的属性。

请注意,要实现这一点,您的类后面的代码需要实现System.ComponentModel名称空间中的INotifyPropertyChanged接口。您还需要确保窗口的datacontext设置正确。

我的Window XAML的内容:

代码语言:javascript
复制
<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>

我的窗口的代码隐藏:

代码语言:javascript
复制
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

刚开始的时候,我发现它很有帮助

希望能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3590768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档