开发者

Problem showing the master details of CurrentItem of System.Controls.Image

开发者 https://www.devze.com 2023-03-16 03:09 出处:网络
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

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

}

0

精彩评论

暂无评论...
验证码 换一张
取 消