I am trying to display the name of a Photo object in a Label, but I am displaying this Photo in specific control System.Windows.Image, this control has a binding to the CurrentItem of a collection of Photos, so if I have a button to display the next Photo, I want to show in my Label the Name of the Photo(the currentItem of the collection!!!!) or another Property inside that element.
public class Photo { Name name; BitmapFrame _image;
public Photo(string path)
{
Name = path;
_image = BitmapFr开发者_StackOverflowame.Create(_source);
}
public BitmapFrame ImageFrame { get { return _image; } set { _image = value; } }
}
public partial class ImageViewer : Window { int currentIndex = 0; ObservableCollection photos;
public ImageViewer()
{
InitializeComponent();
photos = new ObservableCollection<Photo>();
Photo photo1 = new Photo(@"C:/Users/.../DSC00700.jpg");
Photo photo2 = new Photo(@"C:/Users/../DSC00581.jpg");
Photo photo3 = new Photo(@"C:/Users/../3882_6.jpg");
photos.Add(photo1);
photos.Add(photo2);
photos.Add(photo3);
this.DataContext = photos;
}
private void NextPhoto(object sender, RoutedEventArgs e)
{
currentIndex++;
if (currentIndex == photos.Count)
currentIndex = 0;
image.Source = photos[currentIndex].ImageFrame;
}
}
the xaml code:
<Image
Grid.Column="0"
Grid.Row="0"
Name="image"
Stretch="Fill"
DataContext ="{Binding /}"
Source="{Binding ImageFrame}"
>
</Image>
<TextBlock
DataContext="{Binding ElementName=image, Path=DataContext}"
Text="{Binding Name}">
</TextBlock>
Regards Ivan
XMAL:
<Image
Margin="0,0,5,0"
Grid.Column="0"
Grid.Row="0"
Name="image"
Stretch="UniformToFill"
DataContext ="{Binding SelectedPhoto, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dns:MainWindow}}}"
Source="{Binding ImageFrame}" HorizontalAlignment="Center" VerticalAlignment="Center">
</Image>
<ScrollBar Height="20" Name="scbImages" Orientation="Horizontal" Grid.Column="0"
Grid.Row="1" Maximum="0" SmallChange="1" ValueChanged="scbImages_ValueChanged" />
<GroupBox Name="info" Grid.Column="1" Grid.Row="0" Grid.RowSpan="2">
<GroupBox.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Label Content="Name: "/>
<Label DataContext="{Binding Path=DataContext, ElementName=image}" Content="{Binding Name}"></Label>
</StackPanel>
</DataTemplate>
</GroupBox.HeaderTemplate>
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<StackPanel DataContext="{Binding Path=Metadata, ElementName=image}">
<Label>Size:</Label>
<Label Content="{Binding}"></Label>
<Label >Date Image Taken:</Label>
<Label Content="{Binding DateImageTaken}" />
<Label >Camera Model:</Label>
<Label Content="{Binding CameraModel}"/>
<Label >Creation Software:</Label>
<Label Content="{Binding CreationSoftware}" />
<Label >Lens Aperture:</Label>
<Label Content="{Binding LensAperture}" />
<Label >Focal Length:</Label>
<Label Content="{Binding FocalLength}" />
<Label >ISO Speed:</Label>
<Label Content="{Binding IsoSpeed}" />
<Label >Exposure Time:</Label>
<Label Content="{Binding ExposureTime}" />
<Label >Exposure Mode:</Label>
<Label Content="{Binding ExposureMode}" />
<Label >Exposure Compensation:</Label>
<Label Content="{Binding ExposureCompensation}" />
<Label >White Balance Mode:</Label>
<Label Content="{Binding WhiteBalanceMode}" />
<Label >Color Representation:</Label>
<Label Content="{Binding ColorRepresentation}" />
</StackPanel>
</ScrollViewer>
</GroupBox>
</Grid>
</Grid>
Cs:
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes;
namespace WpfApplication2 { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { private string photosDir = @"D:\Users\Rafael\Gaby\Fotos\5 x 7"; private ObservableCollection photos = new ObservableCollection();
public static DependencyProperty SelectedPhotoIndexProperty = DependencyProperty.Register("SelectedPhotoIndex", typeof(double), typeof(MainWindow));
public static DependencyProperty SelectedPhotoProperty = DependencyProperty.Register("SelectedPhoto", typeof(Photo), typeof(MainWindow));
public MainWindow()
{
InitializeComponent();
foreach(var curImg in System.IO.Directory.GetFiles(this.photosDir))
photos.Add(new Photo(curImg));
if(photos.Count > 0)
{
this.scbImages.Maximum = photos.Count - 1;
this.SelectedPhotoIndex = 0;
}
}
public double SelectedPhotoIndex
{
get
{ return this.GetValue(SelectedPhotoIndexProperty) != null ? (double)this.GetValue(SelectedPhotoIndexProperty) : 0; }
set
{
this.SetValue(SelectedPhotoIndexProperty, value);
this.SelectedPhoto = photos[(int)value];
}
}
public Photo SelectedPhoto
{
get { return this.GetValue(SelectedPhotoProperty)as Photo; }
set
{
this.SetValue(SelectedPhotoProperty, value);
}
}
private void scbImages_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
this.SelectedPhotoIndex = (int)e.NewValue;
}
}
public class Photo
{
public Photo(string path)
{
Name = path;
ImageFrame = BitmapFrame.Create(new Uri(path));
}
public string Name
{ get; set; }
public BitmapFrame ImageFrame {
get;
set;
}
}
}
精彩评论