0

バインドに問題がありListViewますObservableCollection<Bitmap>...

それは私のXAMLです:

<ListView ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Disabled"
      ItemsSource="{Binding Path=FrameImages}">
<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <WrapPanel
            Width="Auto"
            ItemWidth="{Binding (ListView.View).ItemWidth, RelativeSource={RelativeSource AncestorType=ListView}}"
            ItemHeight="{Binding (ListView.View).ItemHeight, RelativeSource={RelativeSource AncestorType=ListView}}" />
    </ItemsPanelTemplate>
</ListView.ItemsPanel>

<ListView.ItemTemplate>
    <DataTemplate>
        <Border Width="100" Height="75" BorderThickness="1" BorderBrush="DarkGray" VerticalAlignment="Center" Margin="7,5,7,5">
            <Image Margin="5,5,5,5" Width="100" Height="75" Source="{Binding}" Stretch="Fill"></Image>
        </Border>
    </DataTemplate>
</ListView.ItemTemplate>
</ListView>

背後にあるコード:

public ObservableCollection<Bitmap> FrameImages { get; set; }
public MainWindow()
{
    InitializeComponent();

    this.DataContext = this;

    FrameImages = new ObservableCollection<Bitmap>();
    Bitmap img = new Bitmap(@"E:\test\3047817.bmp");
    FrameImages.Add(img);
}

要素を追加すると、に表示されるように見えますがListView、透明です(空のフレームのみ):/ビットマップをファイルに保存し直そうとしましたが、問題はありませんでした(元の要素と同じ)。なぜ機能しないのかわかりません:(

[編集]
ところで。に置き換えるObservableCollection<Bitmap>と、コードは機能しObservableCollection<BitmapSource>ます。しかし、これがプログラムのパフォーマンスに影響を与える追加の変換です...それが私が必要とする理由ですBitmap

4

1 に答える 1

2

WPFアプリケーションでSystem.Drawing.Bitmapをそのように使用することはできません。クラスはWPFに属していません。WPFはDirectXに基づいているのに対し、GDI+ビットマップをカプセル化します。したがって、BitmapSourceを使用する必要があります。

ただし、ListViewのItemsSourceプロパティを画像パス文字列のコレクションにバインドするだけでもかまいません。文字列からImageSourceへの必要な変換は、WPFによって自動的に実行されます。

本当にビットマップを手動で作成する必要がある場合は、コレクションを次のように定義し、ObservableCollection<ImageSource>次のような方法でコレクション要素を作成する必要があります。

var img = new BitmapImage(new Uri(@"E:\test\3047817.bmp"));
FrameImages.Add(img);

イメージングの概要を確認することをお勧めします。また、WPFのBitmapSourceクラス階層に精通している必要があります。

于 2013-01-17T19:56:19.823 に答える