我正在尝试在Label中显示Photo对象的名称,但我在特定控件System.Windows.Image中显示此Photo,此控件具有与Photos集合的CurrentItem的绑定,所以如果我有一个按钮来显示下一张照片,我想在我的标签中显示照片的名称(该集合的currentItem !!!!)或该元素中的另一个属性。
公共课照片 { 姓名; BitmapFrame _image;
public Photo(string path)
{
Name = path;
_image = BitmapFrame.Create(_source);
}
public BitmapFrame ImageFrame { get { return _image; } set { _image = value; } }
}
public partial class ImageViewer:Window { int currentIndex = 0; ObservableCollection照片;
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;
}
}
xaml代码:
<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>
此致 伊万
答案 0 :(得分:0)
<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>
使用System; 使用System.Collections.Generic; 使用System.Collections.ObjectModel; 使用System.Linq; 使用System.Text; 使用System.Windows; 使用System.Windows.Controls; 使用System.Windows.Data; 使用System.Windows.Documents; 使用System.Windows.Input; 使用System.Windows.Media; 使用System.Windows.Media.Imaging; 使用System.Windows.Navigation; 使用System.Windows.Shapes;
命名空间WpfApplication2 { /// /// MainWindow.xaml的交互逻辑 /// public partial class MainWindow:Window { 私人字符串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;
}
}
}