Entwickler-Ecke

WPF / Silverlight - Drag and Drop, Bilder dynamisch einfügen


Raorkon - So 05.06.11 22:03
Titel: Drag and Drop, Bilder dynamisch einfügen
So und schon hab ich die nächste Frage:

ich will eine Anwendung schreiben die per Drag&Drop ein Bild in mein Prog einfügen wird

dafür habe ich folgendes geschrieben bzw. aus dem Internet folgenden Code entdeckt


XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
<Window x:Class="FS_Test.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="294" Width="300">


    <Grid x:Name="LayoutRoot" Background="White">

        <Grid.RowDefinitions>

            <RowDefinition Height="50"></RowDefinition>

            <RowDefinition></RowDefinition>

        </Grid.RowDefinitions>

        <Border Grid.Row="1" x:Name="photoBorder" 
            BorderBrush="Blue" BorderThickness="4">
            <Canvas x:Name="photoPanel" Grid.Row="1" 
                 Background="Gray" AllowDrop="True"
                 Drop="photoPanel_Drop"
                 DragEnter="photoPanel_DragEnter"
                 DragLeave="photoPanel_DragLeave">
                <!--Image Source="file:///d:/Chrysanthemum.jpg" VerticalAlignment="Center"></Image>-->
            </Canvas>
        </Border>

    </Grid>
</Window>


und dazu


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO;
using System.Windows.Media.Imaging;

namespace FS_Test
{
    /// <summary>
    /// Interaktionslogik für Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {

        }


        private void photoPanel_Drop(object sender, DragEventArgs e)
        {

            photoBorder.BorderBrush = new SolidColorBrush(Colors.Blue);

            IDataObject data = e.Data;

            try
            {
                Array test = (Array)data.GetData(DataFormats.FileDrop);

                string teststring = test.GetValue(0).ToString();
                
                FileInfo f = new FileInfo(teststring);


                    if (IsImage(f))
                    {

                        Stream s = f.OpenRead();

                        BitmapImage bitmap = new BitmapImage();

                        bitmap.StreamSource = (s);

                        Image img = new Image();

                        img.Source = bitmap;

                        img.Width = 100;

                        img.Height = 80;

                        Point p = e.GetPosition(photoPanel);

//                        img.Margin = new Thickness(p.X, p.Y, 0, 0);
                        img.VerticalAlignment = VerticalAlignment.Center;
                        photoPanel.Children.Add(img);

                    }

                
            }
            catch (Exception ex)
            {
            }

        }
        private void photoPanel_DragEnter(object sender, DragEventArgs e)
        {

           photoBorder.BorderBrush = new SolidColorBrush(Colors.Red);

        }

        private void photoPanel_DragLeave(object sender, DragEventArgs e)
        {

            photoBorder.BorderBrush = new SolidColorBrush(Colors.Blue);

        }

        private bool IsImage(FileInfo file)
        {
            string ext = file.Extension.ToLower();

            string[] extensions = 
           {
            ".bmp",
            ".jpg",
            ".jpeg",
            ".gif",
            ".png"
           };

            return extensions.Contains(ext);
        }
    }
}



das Programm funktioniert soweit, nur das kein Bild erscheint
was mach ich falsch?


SakeSushi - Fr 10.06.11 20:58

Anstatt der BitmapImage-Instanz einen FileStream zu übergeben (bitmap.StreamSource = (s);), übergib einfach die Uri zur Datei im Konstruktor der genannten Klasse:


C#-Quelltext
1:
2:
BitmapImage bitmap = new BitmapImage(new Uri(file.FullName, UriKind.Absolute));
Image bitmapView = new Image() { Source = bitmap };