0

WPF 的新手。当从组合框中选择图像名称时,我想在表单中显示图像(图像存储在填充组合的 sql 数据库中)。

有谁知道如何做到这一点的例子。我添加了从组合中选择时填充文本框的代码。

   private void comboBoxDisplay_SelectionChanged(object sender, SelectionChangedEventArgs e)

    {
        string constring = "Data Source=tcp:****;Initial   Catalog=******;Persist Security Info=True;User ID=*******;Password=******";

        string Query = "select * from tables where Name='" +  comboBoxDisplay.SelectedItem.ToString() + "' ;";
        SqlConnection conDataBase = new SqlConnection(constring);
        SqlCommand cmdDataBase = new SqlCommand(Query, conDataBase);
        SqlDataReader myReader;

        try
        {
            conDataBase.Open();
            myReader = cmdDataBase.ExecuteReader();

            while (myReader.Read())
            {

                string sReid = myReader.GetInt32(0).ToString();
                string sName = myReader.GetString(1);
                string sPicture = myReader.GetString(3);

                txtReId.Text = sReid;
                txtName.Text = sName;
                txtPicture.Text = sPicture;

            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
4

1 回答 1

0

通常,该站点的用户更喜欢问题作者提供您所拥有的更多信息。我们还希望看到您至少尝试自己找到答案。

但是,由于您是新用户,我将为您提供完整的解决方案。有几种方法可以实现这一点……我将向您展示一种方法,您可以根据自己的需要进行调整。

启动一个新的 WPF 项目并将以下内容添加到您的MainWindow.xaml.cs文件中:

using System;
using System.Collections.ObjectModel;
using System.Windows;

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = this;
            Images.Add(new Tuple<string, string>("Picture 1", 
"/WpfApplication1;component/Images/Picture 1.png"));
            Images.Add(new Tuple<string, string>("Picture 2", 
"/WpfApplication1;component/Images/Picture 2.png"));
            Images.Add(new Tuple<string, string>("Picture 3", 
"/WpfApplication1;component/Images/Picture 3.png"));
        }

        public static DependencyProperty ImagesProperty = DependencyProperty.Register(
"Images", typeof(ObservableCollection<Tuple<string, string>>), typeof(MainWindow), 
new PropertyMetadata(new ObservableCollection<Tuple<string, string>>()));

        public ObservableCollection<Tuple<string, string>> Images
        {
            get { return (ObservableCollection<Tuple<string, string>>)GetValue(
ImagesProperty); }
            set { SetValue(ImagesProperty, value); }
        }
    }
}

在这里,我创建了一个DependencyProperty命名Images来保存图像信息。它是类型的Tuple<string, string>,这使我能够添加每张图片的名称文件路径。您将需要调整它以适应您在数据库中保存图像的系统。我建议将图像保存在某个文件夹中,然后引用文件路径,因为它比尝试将图像对象加载到Image控件中要容易得多。

接下来,将以下代码放入您的MainWindow.xaml文件中:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition Height="100" />
        </Grid.RowDefinitions>
        <Image Grid.Row="0" Source="{Binding SelectedValue, 
ElementName=ImageComboBox}" />
        <ComboBox Grid.Row="1" Name="ImageComboBox" ItemsSource="{Binding Images}" 
DisplayMemberPath="Item1" SelectedValuePath="Item2" Height="23" Width="120" />
    </Grid>
</Window>

在这里,我将Images集合绑定到ComboBox.ItemsSource属性并将属性设置DisplayMemberPathItem1... 这是Tuple包含图片名称的第一个属性的名称 - 因此,将显示名称。我还将SelectedValuePath属性设置为Item2...这是Tuple保存图片文件路径的第二个属性的名称 - 因此所选项目的值将是所选文件的文件路径Image

另请注意,该Image.Source属性设置为Binding SelectedValue, ElementName=ImageComboBox。这意味着图片的来源将来自ComboBox.SelectedValue,如果您记得的话,它被设置为所选图像的文件路径。

注意事项:

您当然可以Tuple用您自己的类替换对象,只要您更新正确属性的名称以用于ComboBox.SelectedValuePathComboBox.DisplayMemberPath属性。

还将您与此示例代码一起使用的任何图像添加到Images应用程序根目录中命名的文件夹中。此外,除非您将它们命名为Picture 1.png,Picture 2.png和,否则您Picture 3.png将需要更新添加到Images集合中的文件路径。

于 2013-07-31T12:58:16.377 回答