Thread View: alt.pl.comp.lang.csharp
7 messages
7 total messages
Started by Paweł
Mon, 12 Aug 2013 12:49
Drag and drop w WPF
Author: Paweł
Date: Mon, 12 Aug 2013 12:49
Date: Mon, 12 Aug 2013 12:49
109 lines
5235 bytes
5235 bytes
Czesc
Mam problem z prawidłowym użyciem mechanizmu Drag and Drop w swoim
programie. Otóż w kodzie xaml mam:
<ListView Grid.Column="0" Grid.Row="1" Height="200" Margin="2"
Name="lvListaWczytanychPlikowFotek" ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<Border BorderBrush="Bisque"
BorderThickness="2" CornerRadius="5" Margin="5">
<Image Margin="5"
Source="{Binding .Foto}" Height="170" Width="150"
MouseLeftButtonDown="DragImage" />
</Border>
<StackPanel>
<TextBlock
Name="tbNazwaPliku" Text="{Binding .NazwaPliku}" />
</StackPanel>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
[...]
<StackPanel Grid.Column="1" Grid.Row="0" Grid.RowSpan="2" Margin="5"
Background="Transparent">
<TextBlock>Fotografia 1:</TextBlock>
<Border BorderThickness="2" Margin="2" BorderBrush="Beige">
<Image MinWidth="200" MinHeight="200" AllowDrop="True"
Drop="DropImageFoto" Name="image1foto" Stretch="UniformToFill"></Image>
</Border>
</StackPanel>
W kodzie zaś, mam klasę:
public class Fotografia
{
public string NazwaPliku { get; set; }
public string SciezkaDoPliku { get; set; }
public ImageSource Foto { get; set; }
public Fotografia()
{
}
public Fotografia(string _nazwaPliku, string
_sciezkaDoPliku, ImageSource _foto)
{
this.NazwaPliku = _nazwaPliku;
this.SciezkaDoPliku = _sciezkaDoPliku;
this.Foto = _foto;
}
}
i obiekt:
public ObservableCollection<Fotografia> listaWczytaneFotki = new
ObservableCollection<Fotografia>();
do którego są pobierane pliki
listaWczytaneFotki.Add(new Fotografia{NazwaPliku =
System.IO.Path.GetFileName(file), SciezkaDoPliku =
System.IO.Path.GetFullPath(file),Foto = (new
ImageSourceConverter()).ConvertFromString(file) as ImageSource });
Teraz chcę móc przeciągać obrazek z kontrolki ListView
(lvListaWczytanychPlikowFotek) na kontrolkę Image(image1foto), tak aby
on się w niej wyświetlił:
private void DragImage(object sender, MouseButtonEventArgs e)
{
//Image image = e.Source as Image;
//DataObject data = new DataObject(typeof(ImageSource),
image.Source);
//DragDrop.DoDragDrop(image, data, DragDropEffects.Copy);
//e.Handled = true;
Fotografia current =
(Fotografia)lvListaWczytanychPlikowFotek.Items.CurrentItem;
ImageSource data = current.Foto;
DragDrop.DoDragDrop(lvListaWczytanychPlikowFotek, data,
DragDropEffects.Copy);
e.Handled = true;
}
private void DropImageFoto(object sender, DragEventArgs e)
{
Fotografia brFoto = e.Data.GetData(typeof(Fotografia)) as
Fotografia;
Image imageControl = new Image() { Width =
image1foto.Width, Height = image1foto.Height, Source = brFoto.Foto };
imageControl.Stretch = Stretch.UniformToFill;
this.image1foto.Source = imageControl.Source;
e.Handled = true;
}
Na chwilę obecną obrazki w ListView się ładnie wyświetlają, w momencie
rozpoczęcia przeciągania wybranej fotografii kursor myszy zmienia
kształt ale nie wykonuje się fragment kodu związany z metodą
DropImageFoto. Co pominęłem że ten kod nie działa prawidłowo ?
Z góry dzięki za podpowiedź. Pozdrawiam
Re: Drag and drop w WPF
Author: Paweł
Date: Tue, 13 Aug 2013 08:44
Date: Tue, 13 Aug 2013 08:44
1 lines
1072 bytes
1072 bytes
Jakieś pomysły ?
Re: Drag and drop w WPF
Author: Łukasz 'Maly' Ostrowski
Date: Tue, 13 Aug 2013 15:49
Date: Tue, 13 Aug 2013 15:49
19 lines
1598 bytes
1598 bytes
On Mon, 12 Aug 2013 14:49:42 +0200, Paweł wrote: > Mam problem z prawidłowym użyciem mechanizmu Drag and Drop w swoim > programie. Otóż w kodzie xaml mam: > > <snip> > > Na chwilę obecną obrazki w ListView się ładnie wyświetlają, w momencie > rozpoczęcia przeciągania wybranej fotografii kursor myszy zmienia > kształt ale nie wykonuje się fragment kodu związany z metodą > DropImageFoto. Co pominęłem że ten kod nie działa prawidłowo ? Nie jestem wielkim specjalistą WPF, ale jak wrzucisz kompilowalny projekt to zajrzę dzisiaj/jutro. Nie przesadnie chce mi się 200 linii kodu i markupu ręcznie składać w kompilowalną całość ;-). -- Pozdrawiam, Łukasz 'Mały' Ostrowski.
Re: Drag and drop w WPF
Author: Paweł
Date: Wed, 14 Aug 2013 10:58
Date: Wed, 14 Aug 2013 10:58
18 lines
1830 bytes
1830 bytes
On 2013-08-13 17:49, Łukasz 'Maly' Ostrowski wrote: > On Mon, 12 Aug 2013 14:49:42 +0200, Paweł wrote: >> Mam problem z prawidłowym użyciem mechanizmu Drag and Drop w swoim >> programie. Otóż w kodzie xaml mam: [...] > Nie jestem wielkim specjalistą WPF, ale jak wrzucisz > kompilowalny projekt to zajrzę dzisiaj/jutro. Nie > przesadnie chce mi się 200 linii kodu i markupu > ręcznie składać w kompilowalną całość ;-). > Z góry dzięki za pomoc Pod tym plikiem znajduje się projekt VS2010 http://www.gg.pl/dysk/NdvtjPMZf-yxNNvtjPMZQAI/FotografieWpf.zip Pozdrawiam Paweł
Re: Drag and drop w WPF
Author: Łukasz 'Maly' Ostrowski
Date: Wed, 14 Aug 2013 16:16
Date: Wed, 14 Aug 2013 16:16
21 lines
1597 bytes
1597 bytes
On Wed, 14 Aug 2013 12:58:01 +0200, Paweł wrote: > Pod tym plikiem znajduje się projekt VS2010 > > http://www.gg.pl/dysk/NdvtjPMZf-yxNNvtjPMZQAI/FotografieWpf.zip Zajrzałem, wygląda na to że Image, lub też pusty Image, nie jest rozpoznawany jako valid-drop-target. Najłatwiejsze obejście to ustawić drag&drop na parent'a, czyli na StackPanel z Labelem+Image. Zmiany które zrobiłem: 1. http://pastebin.com/7j1Wz0FT - xaml.cs Głównie kosmetycznie tutaj, ale zajrzyj, żadnych rewelacji w każdym razie. 2. http://pastebin.com/KfW6AhPL - xaml. Sprawdzone, działa. Później/jutro zajrzę sam z ciekawości czemu nie mogę ustawić Image jako target D&D. -- Pozdrawiam, Łukasz 'Mały' Ostrowski.
Re: Drag and drop w WPF
Author: Pawel
Date: Wed, 14 Aug 2013 21:04
Date: Wed, 14 Aug 2013 21:04
38 lines
2778 bytes
2778 bytes
W dniu 2013-08-14 18:16, Łukasz 'Maly' Ostrowski pisze:
> On Wed, 14 Aug 2013 12:58:01 +0200, Paweł wrote:
>> Pod tym plikiem znajduje się projekt VS2010
>>
>> http://www.gg.pl/dysk/NdvtjPMZf-yxNNvtjPMZQAI/FotografieWpf.zip
>
> Zajrzałem, wygląda na to że Image, lub też pusty Image,
> nie jest rozpoznawany jako valid-drop-target. Najłatwiejsze
> obejście to ustawić drag&drop na parent'a, czyli na
> StackPanel z Labelem+Image. Zmiany które zrobiłem:
>
> 1. http://pastebin.com/7j1Wz0FT - xaml.cs
> Głównie kosmetycznie tutaj, ale zajrzyj, żadnych
> rewelacji w każdym razie.
> 2. http://pastebin.com/KfW6AhPL - xaml.
>
> Sprawdzone, działa. Później/jutro zajrzę sam z ciekawości
> czemu nie mogę ustawić Image jako target D&D.
>
Dzięki wielkie za pochylenie się nad moimi bazgrołami.
Ale mam pytanko ponieważ trochę to źle działa, gdyż zawsze do docelowego
image wstawia się tylko 1 obrazek z wczytanych do ListView, nawet za
pierwszym razem wybierając 5 obrazek z wczytanych wstawi się pierwszy z
listy. Dlaczego ?
Po drugie zastanawia mnie dlaczego nie działa bindowanie do elementu
.NazwaPliku chociaż dla .Foto już tak ?
<StackPanel Orientation="Vertical">
<Border BorderBrush="Black">
<Image Margin="5" Source="{Binding .Foto}" />
</Border>
<StackPanel>
<TextBlock Text="{Binding .NazwaPliku}" />
</StackPanel>
</StackPanel>
Dziękuję i pozdrawiam Paweł
Re: Drag and drop w WPF
Author: Łukasz 'Maly' Ostrowski
Date: Thu, 15 Aug 2013 08:24
Date: Thu, 15 Aug 2013 08:24
39 lines
2380 bytes
2380 bytes
On Wed, 14 Aug 2013 23:04:34 +0200, Pawel wrote:
> Ale mam pytanko ponieważ trochę to źle działa, gdyż zawsze do docelowego
> image wstawia się tylko 1 obrazek z wczytanych do ListView, nawet za
> pierwszym razem wybierając 5 obrazek z wczytanych wstawi się pierwszy z
> listy. Dlaczego ?
Fotografia current =
(Fotografia)lvListaWczytanychPlikowFotek.Items.CurrentItem;
Ponieważ zawsze zaznaczoną fotkę wybierasz do dragowania, a nie
"dragowaną"/"wybraną pozycją myszki". Tego nie weryfikowałem(*),
taki strzał. Kliknij i dopiero przeciągaj zaznaczone elementy
żeby to zweryfikować.
*) Już poprawioną solucję wywaliłem, nie chce mi się znowu
poprawiać ;-).
> Po drugie zastanawia mnie dlaczego nie działa bindowanie do elementu
> .NazwaPliku chociaż dla .Foto już tak ?
>
> <StackPanel Orientation="Vertical">
> <Border BorderBrush="Black">
> <Image Margin="5" Source="{Binding .Foto}" />
> </Border>
> <StackPanel>
> <TextBlock Text="{Binding .NazwaPliku}" />
> </StackPanel>
> </StackPanel>
Działa bindowanie, to scrollowanie tego ListView dziwnie
się zachowuje, jeżeli zmienisz to na Orientation na Horizontal,
lub powiększysz ListView, to nazwy plików się pojawią.
p.s. Powalcz z UI, bo jest siermiężne, niech się skaluje z
wielkościa formy przynajmniej :).
--
Pozdrawiam,
Łukasz 'Mały' Ostrowski.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads