2010-08-28 99 views
0

我想設計一個系統界面,我有不同的控件(矩形)一個接一個地動畫(發光或發光),並將消息發送到隊列,因爲他們動畫 - 我是C#和WPF所以不太清楚如何appoach這個 - 任何出發點?使用WPF事件觸發事件

編輯:

感謝您的例子 - 雖然不能完全理解它,我想出了以下,但仍然有一些問題:

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;是做什麼的,我該如何正確設置它?

+2

閱讀關於觸發器,數據觸發器和事件觸發器假設它們是開始的基礎知識。另外,看看ObservableCollection和INotifyPropertyChanged這些東西在未來會有幫助。 – 2010-08-29 14:09:20

回答

2

嘿理查德,我收回了我以前的答案並更新了這個新的答案,希望它更有意義。另外,如果您想了解更多有關建議答案的信息,請使用「評論」選項。

基本上我剛剛在畫布上添加了一個帶有發光效果的矩形,然後將光環的大小限制到每當鼠標移過Canvas時我操作的屬性。

請注意,爲了這個工作,您的代碼在類後面將需要實現位於System.ComponentModel命名空間中的INotifyPropertyChanged接口。您還需要確保窗口的datacontext設置正確。

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

我發現它非常有用,當我第一次開始

希望它能幫助。

+0

嗨瓦爾,這有助於啓動 - 我的問題仍然是如何以及何時調用我的課程,發送消息到隊列。我還需要一次點擊一個按鈕來動畫一個矩形。問題是我必須在三週內提出這個工作 - 所以學習的時間不是真的。但是當我有更多時間時,你幫助開始了。 歡呼 – migarich 2010-09-02 13:13:47

+0

我不是100%確定你的排隊是什麼意思。你只是想讓每個矩形能夠在鼠標懸停在給定位置時顯示一條消息?如果要將矩形動畫更改爲onclick,則可以使用MouseLeftButtonUp事件而不是MouseOver。 否則,如果你想要的只是一個響應單個按鈕的動畫序列,也許你會更好地使用另一種語言,如Flash – Val 2010-09-03 09:14:13

+0

嗨瓦爾,讓我解釋一下。我有一個消息QUEue(MSMQ)不確定你是否熟悉這種(如果你喜歡,那種存儲方式)我正在模擬軌道周圍的列車運動。每當矩形改變顏色(意味着列車在那裏)時,我都有一個方法添加到該消息隊列中。動畫現在正在工作(謝謝),但需要觸發消息(即:在這裏矩形ID:1) - 可以這樣做嗎? 我可以發送代碼,如果你喜歡。 – migarich 2010-09-03 10:56:24