显示System.Controls.Image的CurrentItem的主要细节的问题

时间:2011-06-28 15:08:49

标签: wpf wpf-controls binding

我正在尝试在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>

此致 伊万

1 个答案:

答案 0 :(得分:0)

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:

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

}