所有。我有一个应用程序扫描图片文件夹,并在列表框中显示图像及其名称。每个图像和图像名称(显示在图像旁边的文本块中)存储在列表框内的水平堆栈面板中。
当用户在列表框中选择图像名称时,我整个下午都在尝试查找在文本框中显示图像名称的方法。听起来非常简单,我确信它是,但我似乎无法让它发挥作用。
任何人都可以指出我正确的方向这样做的最佳方式吗?感谢。
如果有帮助,这是我的xaml:
<Grid>
<ListBox ItemsSource="{Binding AllImages}" Margin="0,0,262,0" Name="listBox1" MouseLeftButtonDown="listBox1_MouseLeftButtonDown">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Image}" Width="50" Height="50" Margin="6"/>
<TextBlock Text="{Binding Name}" Margin="6" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBox Height="23" HorizontalAlignment="Left" Margin="265,148,0,0" Name="textBox1" VerticalAlignment="Top" Width="198" />
</Grid>
我的代码背后:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public class MyImage
{
private ImageSource _image;
private string _name;
public MyImage(ImageSource image, string name)
{
_image = image;
_name = name;
}
public override string ToString()
{
return _name;
}
public ImageSource Image
{
get { return _image; }
}
public string Name
{
get { return _name; }
}
}
public List<MyImage> AllImages
{
get
{
List<MyImage> result = new List<MyImage>();
string filePath = @"D:\Projects\Visual Studio 2010\WpfApplication5\WpfApplication5\bin\Debug\ImageFolder";
string[] files = Directory.GetFiles(filePath);
foreach (string filename in files)
{
try
{
result.Add(
new MyImage(
new BitmapImage(
new Uri(filename)),
System.IO.Path.GetFileNameWithoutExtension(filename)));
}
catch { }
}
return result;
}
}
}
答案 0 :(得分:0)
看看这个问题。
How do I bind a Listview SelectedItem to a Textbox using the TwoWay mode?
在您的情况下使用
<TextBox Height="23"
HorizontalAlignment="Left"
Margin="265,148,0,0"
Name="textBox1"
VerticalAlignment="Top" Width="198"
Text="{Binding SelectedItem.Name, ElementName=listBox1}"/>
答案 1 :(得分:0)
要从代码中检索所选图像,您至少有3个选项(我假设您的图像由类ImageItem
表示)
在IsSynchronizedWithCurrentItem
上将ListBox
设为true,并使用以下代码检索所选项目:
ICollectionView view = CollectionViewSource(AllImages);
ImageItem selectedImage = (ImageItem)view.CurrentItem;
将SelectedItem
的{{1}}绑定到ListBox
中的某个媒体资源:
DataContext
直接从代码隐藏:
访问<ListBox .... SelectedItem="{Binding SelectedImage}">
属性
SelectedItem
当然,如果您只想在ImageItem selectedImage = (ImageItem)listBox1.SelectedItem;
中显示名称,可以使用Russell Troywest的解决方案