2012-09-11 37 views
7

Tôi đã bao gồm một tệp biểu tượng bên trong Resources.resx mà tôi muốn hiển thị trên TreeViewItem bên trong một chồng xếp chồng.Cách sử dụng Resources.resx để liên kết hình ảnh

1) Tệp .ico có thể được sử dụng cho mục đích này không? Hay nó phải là .bmp hoặc jpg?

2) Bạn đặt nguồn như trong XAML là gì? Mã sau đây không hoạt động đối với tôi

<StackPanel Orientation="Horizontal"> 
    <Image Margin="2" Source="/Resources/Folder_Back.ico" /> 
    <TextBlock Margin="2" Text="{Binding ProgramName}" 
    Foreground="White" FontWeight="Bold"/> 
</StackPanel> 

Trả lời

5

bạn không thể làm điều đó. mà chỉ làm việc tại winforms

xem bài này để biết thêm

Different way how add image to resources

sử dụng phương pháp trình bày trong bài này

WPF image resources

thay

quote:

Nếu bạn sẽ sử dụng hình ảnh ở nhiều nơi, thì nó chỉ nạp dữ liệu hình ảnh một lần vào bộ nhớ và sau đó chia sẻ nó giữa tất cả các phần tử Image.

Để làm điều này, tạo ra một BitmapSource như một nguồn lực ở đâu đó:

<BitmapImage x:Key="MyImageSource" UriSource="../Media/Image.png" /> 

Sau đó, trong mã của bạn, sử dụng một cái gì đó như:

<Image Source="{StaticResource MyImageSource}" /> 

Trong trường hợp của tôi, tôi thấy rằng tôi đã phải đặt tệp Image.png để có tác vụ xây dựng là Resource thay vì chỉ Content. Điều này làm cho hình ảnh được mang trong bộ sưu tập đã biên dịch của bạn.

+0

Tôi có thể sử dụng các tệp .ico cho nguồn hình ảnh không? – l46kok

+0

có. chỉ cần sử dụng .ico thay vì png. bạn thậm chí có thể chỉnh sửa nó bên trong VS – Nahum

12

Đây là một thủ thuật để truy cập hình ảnh trong tập tin tài nguyên:

Accessing image from Resource File in XAML markup

Trước tiên, bạn cần phải thêm tham chiếu đến thuộc tính của dự án như thế này:

xmlns:properties="clr-namespace:MyProject.Properties" 

Và sau đó truy cập nó thông qua XAML như này:

<image source="{Binding Source={x:Static properties:Resources.ImageName}}" /> 

Bạn có thể sử dụng PNG/JPG/BMP cũng như tệp ICO nhưng mọi người đều khuyên dùng PNG.

+6

Điều này không hoạt động. Không có gì xuất hiện. Tôi đã thử sử dụng nó cho một biểu tượng cũng như một hình ảnh. –

3

để làm cho giải pháp của Qorbani hoạt động thêm bộ chuyển đổi vào Image Source.Binding!

XAML - Namespaces

xmlns:properties="clr-namespace:YourNameSpace.Properties" 
xmlns:converter="clr-namespace:YourNameSpace.Converter" 

XAML - Resource (UserControl hoặc Window)

<UserControl.Resources> 
     <ResourceDictionary> 
       <converter:BitmapToImageSourceConverter x:Key="BitmapToImageSourceConverter" /> 
     </ResourceDictionary> 
</UserControl.Resources> 

XAML Mã

<StackPanel Orientation="Horizontal"> 
        <Image Width="32" Height="32" Source="{Binding Source={x:Static properties:Resources.Import}, Converter={StaticResource BitmapToImageSourceConverter}}" Stretch="Fill" /> 
        <TextBlock Margin="5" HorizontalAlignment="Center" VerticalAlignment="Center">Import</TextBlock> 
</StackPanel> 

BitmapToImageSourceConverter.cs

using System; 
using System.Collections.Generic; 
using System.Drawing; 
using System.Drawing.Imaging; 
using System.Globalization; 
using System.Linq; 
using System.Text; 
using System.Windows.Data; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 

namespace YourNameSpace 
{ 
    public class BitmapToImageSourceConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      var bitmap = value as System.Drawing.Bitmap; 
      if (bitmap == null) 
       throw new ArgumentNullException("bitmap"); 

      var rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height); 

      var bitmapData = bitmap.LockBits(
       rect, 
       ImageLockMode.ReadWrite, 
       System.Drawing.Imaging.PixelFormat.Format32bppArgb); 

      try 
      { 
       var size = (rect.Width * rect.Height) * 4; 

       return BitmapSource.Create(
        bitmap.Width, 
        bitmap.Height, 
        bitmap.HorizontalResolution, 
        bitmap.VerticalResolution, 
        PixelFormats.Bgra32, 
        null, 
        bitmapData.Scan0, 
        size, 
        bitmapData.Stride); 
      } 
      finally 
      { 
       bitmap.UnlockBits(bitmapData); 
      } 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
} 
+0

Tại sao không có thêm upvotes? Giải pháp này thực hiện công việc. – AndyUK

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