2009-06-02 40 views
10

Tôi muốn biết chính xác cách sử dụng động Tài nguyên từ điển trong mã C# phía sau - tức là .. Tôi muốn tải hình ảnh trong thời gian chạy từ tài nguyên hình ảnh trong từ điểntài nguyên hình ảnh wpf và thay đổi hình ảnh trong điều khiển wpf tại thời gian chạy

Tôi có một chương trình có 3 hình ảnh trong Từ điển WPF - đây là những hình ảnh được đặt làm tài nguyên hình ảnh.

Sau đó, trong mã phía sau Cửa sổ WPF của tôi, tôi muốn tải bất kỳ một trong ba hình ảnh dựa trên sự kiện do người dùng khởi tạo.

Không có mã thực tôi phải hiển thị là không có gì mà tôi đã thực hiện.

Ý tưởng?

Trả lời

20

Trước tiên, hãy chắc chắn bạn đã xác định nguồn tài nguyên hình ảnh của bạn như thế này:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ImageSource x:Key="image1">images/image1.jpg</ImageSource> 
    <ImageSource x:Key="image2">images/image2.jpg</ImageSource> 
</ResourceDictionary> 

Thứ hai, tôi giả định rằng từ điển WPF của bạn là trong tập tin riêng của mình. Bây giờ bạn phải chắc chắn rằng bạn đã hợp nhất từ ​​điển của bạn vào XAML của cửa sổ chính của bạn (bỏ qua bước này nếu từ điển tài nguyên của bạn được định nghĩa bên trong XAML của cửa sổ). Trong file XAML của cửa sổ của bạn, hãy chắc chắn bạn có một cái gì đó như thế này:

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="myDictionary.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Window.Resources> 

Lúc này, trong code-behind, bạn có thể sử dụng phương pháp FindResource() để xác định vị trí tài nguyên hình ảnh của bạn bằng cách đó là tên chính (giá trị của thuộc tính x: Khóa trên ImageSource trong từ điển tài nguyên) như sau:

imageControl.Source = (ImageSource)FindResource("image1"); 

Hy vọng điều này sẽ hữu ích!

+0

ah, những gì tôi đã bỏ lỡ là việc hợp nhất từ ​​điển của tôi vào Window.Resources - được nhiều người đánh giá cao! – Tab

+0

Phản hồi được viết độc đáo. 1 và cảm ơn! Duyệt MSDN là nỗi đau cho các tình huống như vậy – Gishu

+0

Kudo - ngắn ngọt và rất chính xác –

1

Đây là phần bổ sung cho the accepted answer: Khi làm việc trong một ViewModel từ MVVM, hãy đảm bảo sử dụng FindResource từ chế độ xem nơi thư mục tài nguyên được thêm vào.

<Window x:Class="My.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:ViewModels="clr-namespace:My.ViewModels" 
     Title="USA Hockey Player Evaluation tool" 
     Icon="/USAHockeyPlayerEval;component/View/Images/HET.ico" 
     SizeToContent="WidthAndHeight" 
     MinHeight="500px" MinWidth="800px"> 
    <Window.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Images.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Window.Resources> 
    <Window.DataContext> 
     <ViewModels:MainWindowMV/> 
    </Window.DataContext> 
    <StackPanel> 
     <Menu> 
      <MenuItem Header="File"> 
       <MenuItem Header="Save"></MenuItem> 

Quan điểm của tôi trong trường hợp này là một cửa sổ (Tôi không biết MVVM đúng ;-))

Image img = new Image();          
img.Source = (ImageSource)WindowReference.FindResource("Pluse"); 

Ở đây WindowReference là một tham chiếu đến My.MainWindow.

Các vấn đề liên quan