选择图像名称时,在表单中显示图像

时间:2013-07-31 11:47:38

标签: c# wpf

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);
        }

1 个答案:

答案 0 :(得分: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的{​​{1}}来保存图像信息。它的类型为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属性设置为DisplayMemberPath ...这是第一个Item1的名称}属性,其中包含图片名称 - 因此,将显示名称。我还将Tuple属性设置为SelectedValuePath ...这是保存图片文件路径的第二个Item2属性的名称 - 因此所选项的值将是文件所选Tuple的路径。

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

注意事项:

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

还请将您使用此示例代码的所有图像添加到应用程序根目录中名为ComboBox.DisplayMemberPath的文件夹中。此外,除非您将其命名为ImagesPicture 1.pngPicture 2.png,否则您需要更新添加到Picture 3.png集合中的文件路径。