图像未在用户控件的列表框中显示

时间:2012-09-03 16:22:09

标签: wpf vb.net user-controls listbox

这是我第一次在WPF中使用UserControl。以下是我的Usercontrol Xaml和后台VB代码:

<UserControl x:Class="AddNewGenre"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d" d:DesignHeight="194" d:DesignWidth="405">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30" />
            <RowDefinition Height="130" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="72*" />
            <ColumnDefinition Width="333*" />
        </Grid.ColumnDefinitions>

        <ListBox Name="GenreListBox" ItemsSource="{Binding}"
                 Grid.Row="1" Grid.Column="1">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel IsItemsHost="True" />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Image Source="{Binding Value}" Width="128" Height="128" />
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</UserControl>

代码文件:

Public Class AddNewGenre
    Dim Result As HODLib.Classes.GenreClass

    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        Me.DataContext = Result
    End Sub

    Private Sub UserControl_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded

        GenreListBox.ItemsSource = GlobalValues.ImageDictionary
    End Sub

End Class

以下是获取GlobalValues.ImageDictionary的代码:

Namespace GlobalValues
    Module CurrentVariables
        Public ImageDictionary As Concurrent.ConcurrentDictionary(Of String, BitmapImage)

        Public Sub Initialize()
            ImageDictionary = New Concurrent.ConcurrentDictionary(Of String, BitmapImage)

            'try get resources
            GetAllBitmaps()

        End Sub

        Public Sub GetAllBitmaps()
            Try
                ImageDictionary.Clear()
                With ImageDictionary
                    .TryAdd("Box", New BitmapImage(New Uri("Resources\Box.png", UriKind.Relative)))
                    .TryAdd("Tri", New BitmapImage(New Uri("Resources\Tri.png", UriKind.Relative)))
                End With
            Catch ex As Exception

            End Try
        End Sub

    End Module
End Namespace

问题是图像没有显示在图像列表框中,只显示黑色项目。你能否告诉我在这里做错了什么。

2 个答案:

答案 0 :(得分:0)

从xaml中的列表框中删除ItemsSource,因为您已经在自己的代码隐藏文件中设置了它。

<ListBox Name="GenreListBox"
                 Grid.Row="1" Grid.Column="1">

答案 1 :(得分:0)

最后在这篇文章中找到了答案:Accessing Build Action Resource type files在我的案例中,我将值设为格式字符串&#34; / HOD; component / Resources / Box.png&#34;而不是BitmapImage