2017-10-13 95 views
0

是否可以使用事件訪問xaml中的特定資源?WPF OnMouseEnter使用事件更改圖像

我試圖讓鼠標進入網格時圖像發生變化,但問題是我無法從事件中更改圖像。

我想要做的事,如:

OnMouseEnter(object sender, MouseEventArgs e) { 
((Image)GetResource("logo")).Source = "pathToImage.jpg"; 
} 

其中「標誌」是圖像資源的名稱。

+0

「我無法從事件中更改圖像」是什麼意思?你的代碼沒有編譯,還是運行時錯誤?除此之外,通常不需要聲明UI元素作爲資源。那麼你想達到什麼目的? – Clemens

+0

我正在嘗試使用事件更改窗體上圖像元素的圖像源。當mouseEnter事件在特定元素上觸發時,我希望能夠更改不同元素的圖像。 – Mike

回答

1

看來你只是想設置您的XAML聲明某處圖像元素的Source屬性。所有你需要做的是設置x:Name屬性,這將產生在你的窗口類的成員,像

<Image x:Name="image"/> 

現在,您可以直接訪問該元素在後面的代碼和值分配給這樣的Source屬性:

image.Source = new BitmapImage(new Uri("pathToImage.jpg")); 
+0

Working,thanks! – Mike

1

如果要連接在OnMouseEnter元素是FrameworkElement,那麼你可以嘗試做一些這樣的:

OnMouseEnter(object sender, MouseEventArgs e) { 
    var element = sender as FrameworkElement; 
    var image = element.FindResource("logo") as Image; 
    image.Source = new BitmapImage(new Uri("pathToImage.jpg")); 
} 

否則,可能會改變你的從「資源」:

<Image x:Key="logo" Source="initialImage.jpg" /> 

喜歡的東西:

<Image x:Key="logo" Source="{Binding Source={x:Static LogoImage.SingletonInstance}, Path=Logo}" /> 

而且有一個S類沿線的omething:

public class LogoImage : INotifyPropertyChanged { 
    public static LogoImage SingletonInstance { get; } = new LogoImage(); 

    public ImageSource Logo { get; private set; } 
    public void SetLogo(ImageSource image) 
    { 
     Logo = image; 
     RaiseNotifyPropertyChanged(nameof(Logo)); 
    } 

    // Implement INotifyPropertyChanged 

} 
+0

嗯,不能得到xaml文件來編譯。 :( – Mike

+0

)您可以直接綁定到靜態屬性,包括更改通知,而不是實現單例。請參見:http://10rem.net/blog/2011/11/29/wpf-45-binding-and-change -notification-for-static-properties – Clemens

+0

var image = element.FindResource(「logo」)as Image; is is exception:System.Windows.ResourceReferenceKeyNotFoundException:「logo」resource not found – Mike