Привязка изображения в WPF? - PullRequest
3 голосов
/ 04 февраля 2010

Я хочу показать изображение в WPF, созданное процессом,
например: у нас есть метод с именем createWPFImage ()

Image createWPFImage() { ... }

Итак, вывод createWPFImage () - это изображение.
В коде XAML у нас есть что-то вроде ниже:

<StackPanel.ToolTip>
    <StackPanel Orientation="Horizontal">
        <Image Width="64" Height="64" Margin="0 2 4 0" />
        <TextBlock Text="{Binding Path=Description}" VerticalAlignment="Center" />
    </StackPanel>
</StackPanel.ToolTip>


Теперь, как я могу связать вывод createWPFImage () с изображением в коде XAML?
Буду признателен, если вы меня направите.

Ответы [ 2 ]

4 голосов
/ 04 февраля 2010

Скажем, у вас есть класс "MyClass" с методом "CreateWpfImage" (см. Пример ниже).

В вашем XAML вы можете создать MyClass, а затем вызвать CreateWpfImage, используя ObjectDataProvider в разделе «Ресурсы» (см. Статью в блоге Bea Stollnitz ObjectDataProvider ).

1007 * XAML *

<Window x:Class="MyApplicationNamespace.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:MyApplicationNamespace="clr-namespace:MyApplicationNamespace"
    Title="Window1" Height="300" Width="300">       

<Window.Resources>
    <ObjectDataProvider ObjectType="{x:Type MyApplicationNamespace:MyClass}" x:Key="MyClass" />
    <ObjectDataProvider ObjectInstance="{StaticResource MyClass}" MethodName="CreateWpfImpage" x:Key="MyImage" />
</Window.Resources>

<StackPanel>
    <Image Source="{Binding Source={StaticResource MyImage}, Path=Source}"/>
</StackPanel>

Пример кода MyClass для создания изображения для использования в XAML -

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace MyApplicationNamespace
{
    public class MyClass
    {
        public Image CreateWpfImpage()
        {
            GeometryDrawing aGeometryDrawing = new GeometryDrawing();
            aGeometryDrawing.Geometry = new EllipseGeometry(new Point(50, 50), 50, 50);
            aGeometryDrawing.Pen = new Pen(Brushes.Red, 10);
            aGeometryDrawing.Brush = Brushes.Blue;
            DrawingImage geometryImage = new DrawingImage(aGeometryDrawing);

            Image anImage = new Image();
            anImage.Source = geometryImage;
            return anImage;
        }
    }
}
2 голосов
/ 04 февраля 2010

Если у вас есть путь к вашему изображению, и вы просто хотите иметь возможность изменять изображение на лету, затем привяжите к свойству зависимости типа string и в своем методе установите значение свойства зависимости.

<Image Source="{Binding MyImagePath}" />

    public static readonly DependencyProperty MyImagePathProperty = DependencyProperty.Register("MyImagePath", typeof(string), typeof(ClassName), new PropertyMetadata("pack://application:,,,/YourAssembly;component//icons/icon1.png"));


    public string MyImagePath
    {
        get { return (string)GetValue(MyImagePathhProperty); }
        set { SetValue(MyImagePathProperty, value); }
    }
...