Большое спасибо! Работает отлично :)

я очень простой вопрос.

У меня есть элемент управления ListView, и я хочу знать, как создать элемент со значком слева. Предметы будутдинамически добавляется в код в C #, а не через XAML.

Образец изображения:Вот

Нечто подобное выше (исключая заголовок Manage Records). Мне удалось сделать вышеописанное, динамически создавая сетки (не используя элемент управления ListView), но я не уверен, как управлять событиями (щелчок и т. Д.).

Заранее спасибо. :)

 msbg14 июн. 2013 г., 00:40
ссылка битая, я бы использовал службу, отличную от imgur, так как 9/10 imgur ссылки, которые я вижу в Интернете, не работают.

Ответы на вопрос(1)

Решение Вопроса

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow"
    xmlns:self="clr-namespace:WpfApplication1"
    xmlns:props="clr-namespace:WpfApplication1.Properties">
<Window.Resources>
    <self:ImageConverter x:Key="Conv"/>

    <DataTemplate x:Key="Template">
        <StackPanel Orientation="Horizontal">
            <Image Source="{Binding Path=Icon, Converter={StaticResource Conv}}"
                   Width="64"
                   Height="64"/>
            <TextBlock Text="{Binding Name}"
                       VerticalAlignment="Center"/>
        </StackPanel>
    </DataTemplate>

</Window.Resources>
<StackPanel>
    <ListView ItemsSource="{Binding Items}" 
              ItemTemplate="{StaticResource Template}"/>
</StackPanel>

Затем мы должны установить нашу PresentationModel как DataContext представления в коде позади этого представления:

    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new SampleModel();
    }

Как вы можете видеть из выражения привязки в XAML, наша модель представления должна предоставлять свойство Items (если вы рассматриваете возможность изменения списка Items во время выполнения, базовая коллекция должна быть ObservableCollection, чтобы ListView реагировал на его изменения):

public class SampleModel 
{
    public IEnumerable<ViewData> Items
    {
        get
        {
            yield return new ViewData(Properties.Resources.airbrush_256, "item 1");
            yield return new ViewData(Properties.Resources.colors_256, "item 2");
            yield return new ViewData(Properties.Resources.distribute_left_edge_256, "item 3");
            yield return new ViewData(Properties.Resources.dossier_ardoise_images, "item 4");
        }
    }
}

public class ViewData
{
    public ViewData(Bitmap icon, string name)
    {
        this._icon = icon;
        this._name = name;
    }

    private readonly Bitmap _icon;
    public Bitmap Icon
    {
        get
        {
            return this._icon;
        }
    }

    private readonly string _name;
    public string Name
    {
        get
        {
            return this._name;
        }
    }
}

В этом решении я добавляю существующие изображения PNG в класс Properties.Resources. Тогда значки имеют тип Bitmap, который несовместим с типом свойства Source, поэтому мы должны преобразовать его в BitmapSource с помощью следующего конвертера:

public class ImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is Bitmap)
        {
            var stream = new MemoryStream();
            ((Bitmap)value).Save(stream, ImageFormat.Png);

            BitmapImage bitmap = new BitmapImage();
            bitmap.BeginInit();
            bitmap.StreamSource = stream;
            bitmap.EndInit();

            return bitmap;
        }
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

С другой стороны, вы можете использоватьупаковать Ури для хранения иконок вместо ресурсов. Тогда ваш класс ViewData предоставит свойство типа Uri (вместо Bitmap). Тогда конвертеры не нужны.

 James24 янв. 2011 г., 16:06
Большое спасибо! Работает отлично :)

Ваш ответ на вопрос