Tôi có một ứng dụng WPF cần cung cấp phản hồi cho người dùng về trạng thái nội bộ. Thiết kế là có ba hình ảnh, gọi chúng là Đỏ, Vàng và Xanh lục. Một trong những hình ảnh này sẽ được hiển thị tại một thời điểm tùy thuộc vào tiểu bang. Sau đây là các điểm:Làm cách nào để thay đổi nguồn hình ảnh động từ mã-đằng sau trong WPF bằng một hình ảnh trong Properties.Resources?
- Ba hình ảnh trong Properties.Resources trong code-behind
- Chỉ có một trong những hình ảnh sẽ được hiển thị tại một thời điểm.
- Thay đổi trạng thái xuất phát từ quá trình mã hóa phía sau chứ không phải từ người dùng.
- Tôi muốn liên kết điều khiển hình ảnh để tôi có thể thay đổi hình ảnh từ mã sau.
Tôi giả định tôi sẽ cần một bộ chuyển đổi hình ảnh để thay đổi hình ảnh JPG để một nguồn hình ảnh như:
[ValueConversion(typeof(System.Drawing.Bitmap), typeof(ImageSource))]
public class BitmapToImageSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var bmp = value as System.Drawing.Bitmap;
if (bmp == null)
return null;
return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
bmp.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
tôi muốn chuyển đổi hình ảnh một lần trong quá trình khởi tạo và giữ một danh sách các nguồn hình ảnh. Tôi cũng giả định tôi sẽ cần một tài sản phụ thuộc để ràng buộc sự kiểm soát, nhưng tôi không chắc chắn làm thế nào để thiết lập khả năng với danh sách này của nguồn hình ảnh:
// Dependancy Property for the North Image
public static readonly DependencyProperty NorthImagePathProperty
= DependencyProperty.Register(
"NorthImagePath",
typeof(ImageSource),
typeof(MainWindow),
new PropertyMetadata("**Don't know what goes here!!!**"));
// Property wrapper for the dependancy property
public ImageSource NorthImagePath
{
get { return (ImageSource)GetValue(NorthImagePathProperty); }
set { SetValue(NorthImagePathProperty, value); }
}
Clemens Bạn đá! Đây là một phản ứng tuyệt vời, toàn diện, dễ hiểu. Tôi bị cám dỗ để sử dụng tùy chọn ràng buộc, nhưng trong trường hợp của tôi, tùy chọn đầu tiên của việc thiết lập nguồn trong mã-đằng sau chỉ là quá thanh lịch. Vấn đề duy nhất là tôi không thể làm cho nó hoạt động với các tệp png. Tôi đã hy vọng cho một nền tảng trong suốt. Nó có nên hoạt động với các tệp png không? Tôi chỉ làm điều gì đó sai, hoặc họ không được hỗ trợ? – dtaylor
Điều này sẽ hoạt động tốt với các tệp PNG. Có lẽ bạn không nên thêm chúng làm tài nguyên cho dự án của bạn (xem bản chỉnh sửa của tôi). Chỉ cần tạo các tệp bằng công cụ hình ảnh yêu thích của bạn và thêm chúng vào một thư mục trong dự án của bạn. Xem [tại đây] (http://meta.stackexchange.com/a/5235) về việc chấp nhận. – Clemens
Clemens, Một lần nữa bạn đã cung cấp một câu trả lời rõ ràng và súc tích! Tệp PNG hoạt động tốt khi tôi chỉ đơn giản là đặt nó vào một thư mục và biến nó thành một tài nguyên thay vì thêm nó như là một properties.resource trong Trình thiết kế tài nguyên. Cảm ơn rất nhiều. – dtaylor