2014-02-21 81 views
1

我有一張圖像,我想在鼠標懸停在圖像上時動態添加效果。提取圖像對象的屬性值

`<Image Name="image1" Stretch="Fill" Source="/Start;component/Images/100px-The_alliance_logo.jpg" MouseEnter="MouseOver" />` 

我想在鼠標懸停在圖像上時提取名稱的值。我用C#編寫了以下代碼。

private void MouseOver(object sender, MouseEventArgs e) 
    { 
      object ObjectName = new object(); 
      ObjectName = Convert.ToString(sender.GetType().GetProperty("Name").GetValue(sender, null)); 
      String Obj = (String)ObjectName; 
      Obj.Effect = shade(Obj); 
    } 

我得到的Obj.Effect = shade(Obj);一個錯誤,即說:「‘串’不包含‘影響’的定義,並沒有擴展方法‘效果’,接受類型‘字符串’的第一個參數可能是發現(您是否缺少使用指令或裝配參考?)

我該如何解決?

+0

您的問題被編輯器標記爲ASP.NET。我把它回滾。雖然它有點顯而易見,但在發佈問題時請特別注意,我添加了WPF和XAML標籤。 – nvoigt

回答

0

如果你堅持做代碼隱藏,這是 WPF應該如何進行編程,那麼你將需要這樣做:

private void MouseOver(object sender, MouseEventArgs e) 
{ 
    var image = sender as Image; 
    if(image != null) 
    { 
     image.Effect = yourShadowEffect; 
    } 
} 

但是,是如何一個很好的例子做WPF的方式here,我強烈建議你看看,因爲背後的代碼會導致你無處可去。

編輯:

在這個例子中,yourShadowEffect應該是System.Windows.Media.Effects.Effect類型的變量,在你的情況下,DropShadowEffect。您可以通過調用構造函數創建一個新:

yourShadowEffect = new DropShadowEffect(); 

你不應該在你的MouseEventHandler做到這一點,而是有這個作爲一個類變量,以節省資源,而不是創建一個新用戶每次懸停它的鼠標懸停在圖像上。

+0

我正在尋找使動態陰影效果,我有12個圖像,所以我想減少代碼量。我得到以下錯誤,** **'System.Windows.Media.Effects.DropShadowEffect'是一個'類型',但在**「image.Effect = yourShadowEffect; **」中用作'變量'**線。你能否解釋一下這個代碼?非常感謝你的答案。 – soundstage

+0

你應該在XAML中做到這一點。如果您要重複使用XAML代碼,請查看樣式和控件模板。我會稍微擴展一下自己的例子,但請自己幫忙,並考慮使用XAML作爲實現此目的的一種方式。不要使用代碼。 – nvoigt

+0

再次感謝您。當我不斷收到StackOverFlow異常時,我最終編寫了XAML中的所有dropshadoweffects。 – soundstage