| 

.NET C# Java Javascript Exception

2
Via WPF (c#) soll (je nach Parameterübergabe) eine beliebige Anzahl an Bildern (bild_1, bild_2, ..., bild_n) angezeigt werden (WrapPanel?), aus der man per Mausklick eine Auswahl treffen kann.
News:
11.07.2014
Daisy 3 2
lbm1305 849 1 8
Wie lautet die Frage? Geht es um das WrapPanel?
lbm1305 11.07.2014
2 Antworten
2
Hallo Daisy

Wegen schlechtem Wetter und Langeweile habe ich deine Frage in ein kleines Projekt umgesetzt.

XAML:

<Window.Resources>

<Style x:Key="itemStyle" TargetType="{x:Type ListViewItem}">
<Setter Property="Margin" Value="2"/>
<Setter Property="BorderBrush" Value="DarkGray"/>
<Setter Property="BorderThickness" Value="7.5"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">

<Grid Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<Image Margin="2"/>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="1"/>
</Grid>

</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="Background" Value="LightBlue"/>
</Trigger>
</Style.Triggers>
</Style>



</Window.Resources>

<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="250"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>

<ListView x:Name="imgListVieww" AllowDrop="True">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<StackPanel HorizontalAlignment="Center" Margin="5">
<Image Source="{Binding ImagePath}" Width="120" Height="75" Margin="10 5"/>
<TextBlock Text="{Binding Name}" HorizontalAlignment="Center" Margin="0 0 0 5"/>
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Margin" Value="2"/>
<Setter Property="BorderBrush" Value="DarkGray"/>
<Setter Property="BorderThickness" Value="2"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="Background" Value="LightBlue"/>
</Trigger>
</Style.Triggers>
</Style>

</ListView.ItemContainerStyle>
</ListView>

<WrapPanel x:Name="wrpPanel" Grid.Column="1">

</WrapPanel>

</Grid>


Code:

public partial class MainWindow : Window
{

public MainWindow()
{
InitializeComponent();

// Alle Bilder einlsen
var images = new ImagesList();

// Bilder aus 'images' in die Liste für ListView kopieren
var source = images.ToList();
// Daten an den ListView übergeben
imgListVieww.ItemsSource = source;
imgListVieww.SelectionChanged += OnListViewSelectionChanged;

// DestinationListe initialisieren
// Dient zur Kontolle des Inhaltes im WrapPanel
DestList = new DestinationList();

}

// Liste für das WrapPanel
private List<ImageItem> DestList { get; set; }

private void OnListViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{

var selectedData=e.AddedItems;

foreach (var item in selectedData)
{
var tmpItem = item as ImageItem;

// Überprüfen ist das Bild berits im WrapPanel
if (!DestList.Contains(tmpItem))
{
// Wen nicht, hinzufügen
DestList.Add(tmpItem);
wrpPanel.Children.Add(ItemControl(tmpItem.ImagePath, tmpItem.Name));
}
}

}

private System.Windows.Controls.Grid ItemControl(Uri imageSource, string name)
{
var grd = new System.Windows.Controls.Grid();
grd.Height = 170D;
grd.Width = 200D;
grd.Margin = new Thickness(5);

var border = new Border();
border.BorderBrush = new SolidColorBrush(Color.FromRgb(229, 160, 0));
border.BorderThickness= new Thickness(1.5D);
border.CornerRadius = new CornerRadius(7.5D);
border.Background = new SolidColorBrush(Color.FromRgb(235, 235, 235));

var stack = new StackPanel();

var img = new Image();
img.Margin = new Thickness(20D, 20D, 20D, 1D);
img.Source = new BitmapImage(imageSource);
stack.Children.Add(img);

var tBlock = new TextBlock();
tBlock.Text = name;
tBlock.HorizontalAlignment = HorizontalAlignment.Center;
tBlock.Margin = new Thickness(0D, 10D, 0D, 10D);
stack.Children.Add(tBlock);

border.Child = stack;
grd.Children.Add(border);

return grd;
}
}

// Liste mit allen Bildern
public class ImagesList: List<ImageItem>
{
public ImagesList()
{
var nelke = new Uri("nelke.jpg", UriKind.RelativeOrAbsolute);
var rose = new Uri("rose.jpg", UriKind.RelativeOrAbsolute);
var shafgarbe = new Uri("shafgarbe.jpg", UriKind.RelativeOrAbsolute);

for (int i = 1; i < 12; i++)
{
int result= i % 3;
if (result == 1) Add(new ImageItem(i, nelke, "Bild " + i.ToString()));
if (result == 2) Add(new ImageItem(i, rose, "Bild " + i.ToString()));
if (result == 0) Add(new ImageItem(i, shafgarbe, "Bild " + i.ToString()));
}
}
}

// Speicherliste der bereits ausgewhählrn Bildern;
public class DestinationList : List<ImageItem> { }

// Ethnizität ImageItem
public class ImageItem
{
public ImageItem(int id, Uri imagePath, string name)
{
ID = id;
ImagePath = imagePath;
Name = name;
}

public int ID { get; set; }
public Uri ImagePath { get; set; }
public string Name { get; set; }
}


Das ganze in ein neues Projekt einfügen und hoffen, dass es läuft!

Gruss
Alex
13.07.2014
Maendler 214 1 7
0
Oleee-ole-ole-oleeee .... Was für ein Wochenende!
Wir werden Fußballweltmeister und nahezu zeitgleich habe ich mit Deiner Antwort endlich einen Ansatz gefunden, auf dem ich die Lösung meines Problems (c#-mäßig) aufbauen kann.
Tausen Dank, liebe/lieber Maendler !!!
14.07.2014
Daisy 3 2
Dann den Beitrag als Lösung markieren. Darüber freut sich dann auch der Autor der Antwort ;-)
lbm1305 14.07.2014

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH