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);
}
答案 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.SelectedValue
和Tuple
属性的正确属性的名称,您当然可以用您自己的类替换ComboBox.SelectedValuePath
个对象。
还请将您使用此示例代码的所有图像添加到应用程序根目录中名为ComboBox.DisplayMemberPath
的文件夹中。此外,除非您将其命名为Images
,Picture 1.png
和Picture 2.png
,否则您需要更新添加到Picture 3.png
集合中的文件路径。