c# - 如何使用从数据库派生的相对文件路径将 WPF 图像元素绑定(bind)到本地硬盘驱动器上的 PNG?

标签 c# wpf image sql-server-ce

我在本地硬盘驱动器上有一个文件夹,里面有几张图片。图像名称/路径存储在本地 SQLCE 数据库中。在 WPF 应用程序中,我试图将这些图像绑定(bind)到 Image 元素(最终进入列表框)。我已经让应用程序运行并编译,列表框出现了,但没有图像在它应该出现的地方。

这是定义列表框使用的数据模板的 XAML...

<Window.Resources>
    <DataTemplate x:Key="assetLBTemplate">
        <StackPanel Orientation="Horizontal">
            <Image Height="32" Width="32" Source="{Binding imageFileName}" />
            <TextBlock Text="{Binding imageFileName}" />
            <TextBlock Text="{Binding assetName}" />
        </StackPanel>
    </DataTemplate>
</Window.Resources>

列表框的 XAML...

<ListBox x:Name="lbAssetsLiquid"
    ItemsSource="{Binding Tables[0]}"
    ItemTemplate="{StaticResource assetLBTemplate}"
    BorderThickness="1, 1, 1, 1" Grid.Column="0" Grid.Row="1" />

我在 Window_Loaded 上运行的代码:

    private void BindLiquidAssetsListBoxData()
    {
        SqlCeConnection connection;
        SqlCeCommand command;
        string sql = "SELECT tblLiquidAssets.assetName, tblLiquidAssets.assetQuantity, tblLiquidAssets.assetValueGP, tblLiquidAssets.assetDescription, tblImages.imageFileName FROM tblLiquidAssets INNER JOIN tblImages ON tblLiquidAssets.assetImageIndex=tblImages.imageID;";
        string connectionString = "Data Source=sharecalc_db.sdf;Persist Security Info=False;";
        DataSet dtSet = new DataSet();

        try
        {
            using (connection = new SqlCeConnection(connectionString))
            {
                command = new SqlCeCommand(sql, connection);
                SqlCeDataAdapter adapter = new SqlCeDataAdapter();
                connection.Open();
                adapter.SelectCommand = command;
                adapter.Fill(dtSet, "tblLiquidAssets");
                lbAssetsLiquid.DataContext = dtSet;
                connection.Close();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

SQL 查询的结果是...

SQL Query

再次...程序加载了列表框,但没有加载图像。

我在输出窗口中得到了这个,这让我觉得我在这里遗漏了一些重要的东西......

转换器无法转换值“gold64.png”(类型“String”)

当我在解决方案资源管理器中将图像添加到项目本身时,它似乎可以工作(图像出现在它们应该出现的位置)......但它不起作用。有人可以将我推向正确的方向吗?

最佳答案

如果你想从文件系统加载文件,你需要使用自定义值转换器将字符串转换为图像。 Image.Source,当传递字符串时,需要来自资源的文件名。您可以在此处找到此类转换器的实现:Display an image in WPF without holding the file open .

关于c# - 如何使用从数据库派生的相对文件路径将 WPF 图像元素绑定(bind)到本地硬盘驱动器上的 PNG?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17267021/

相关文章:

c# - div 标题的客户端更改未反射(reflect)在后面的 C# 代码中

c# - .NET 2.0 的 SAML

c# - 在 wpf 用户控件中公开一个字段以供外部使用

Android - 获取图像资源到 Uri : IllegalArgumentException

c# - Process.Start 导致我的 WPF 程序崩溃

c# - 匹配 M/YYYY、MM/YYYY、M/YY 或 MM/YY 格式但不匹配 MM/DD/YYYY 的正则表达式

.net - Winform->WPF MVVM 键绑定(bind)错误?

c# - WPF TreeView-添加/删除节点后如何刷新树?

jsf-2 - JSF2 忽略空 alt 属性

jquery - 显示由 x+y 坐标定义的图像部分的最佳方式?