【问题标题】:Problem showing the master details of CurrentItem of System.Controls.Image显示 System.Controls.Image 的 CurrentItem 的主要详细信息的问题
【发布时间】:2011-09-24 10:04:26
【问题描述】:

我试图在标签中显示照片对象的名称,但我在特定控件 System.Windows.Image 中显示此照片,此控件具有与照片集合的 CurrentItem 的绑定,所以如果我有一个按钮来显示下一张照片,我想在标签中显示照片的名称(集合的 currentItem !!!)或该元素内的另一个属性。

公开课照片 { 姓名姓名; BitmapFrame _image;

    public Photo(string path)
    {
        Name = path;
        _image = BitmapFrame.Create(_source);
    }

    public BitmapFrame ImageFrame { get { return _image; } set { _image = value; } }
 }

公共部分类 ImageViewer:窗口 { 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>

问候 伊万

【问题讨论】:

    标签: wpf wpf-controls binding


    【解决方案1】:

    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.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 的交互逻辑 /// 公共部分类 MainWindow : 窗口 { 私人字符串 photosDir = @"D:\Users\Rafael\Gaby\Fotos\5 x 7"; 私人 ObservableCollection 照片 = 新 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;
        }
    }
    

    }

    【讨论】:

      猜你喜欢
      • 2011-02-24
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      • 2016-07-05
      相关资源
      最近更新 更多