Pääsivulle | TIETOTEKNIIKAN PÄÄSIVULLE
Kuvamatriisi (WPF)
kuvajoukko on usein kätevä esittää kuvamatriisissa, joka elää
odotetulla tavalla, kun ikkunan kokoa muuttaa. Tässä esimerkissä
ListBox-joukko on sijoitettu WrapPaneliin, jossa kuvat etenevät
vaakasuorassa. Scrolli on vain oikeassa reunassa.
Ensin on ikkunan kuvaus xaml-tiedostona ja sen jälkeen C#-koodi,
joka tulee omaksi tiedostokseen. Sovelluksen testaamiseksi sijoita
16 kuvaa sopivaan kansioon, jonka määrittelet sovelluksessa. Nyt
siellä on oma testikansioni
<!---
4.2.2018 MainWindow.xaml-->
<Window x:Class="Kuvamatr_testi3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Kuvamatr_testi3"
mc:Ignorable="d"
Title="Kuvamatriisin testaus 3" Height="540"
Width="780">
<Window.Resources>
<!--Define the context menu-->
<ContextMenu x:Key="kuvanMenu">
<MenuItem Header="Kohteen
tiedot" Click="MenuItemTiedot_Click"/>
<MenuItem Header="Näytä
iso kuva" Click="MenuItemKuva_Click"/>
<MenuItem Header="Kopioi
kuva työpöydälle" Click="MenuItemKopioi_Click"/>
</ContextMenu>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition
Height="30" />
<RowDefinition Height="*"
/>
<!--- Tässä toimii tähti
oikein, jos jäljempänä on ListBox DockPanelin sisässä -->
</Grid.RowDefinitions>
<StackPanel Grid.Row="0"
Orientation="Horizontal" Margin="2"
Height="24" VerticalAlignment="Top" >
<Label Content=" Kuvat:
" FontWeight="Bold" />
<Label Name="txtKuvanrot"
Content=" " />
<Label
Content=" Kuvamatriisi ListBoxissa" />
<Button FontWeight="Bold"
Content=" Sulje " Margin="30,0,0,0"
PreviewMouseLeftButtonUp="ButtonSulje_Click"/>
<Button FontWeight="Bold"
Content=" Kuvan tiedot " Margin="30,0,0,0"
PreviewMouseLeftButtonUp="ButtonTiedot_Click"/>
<Label Content="
Kuvilla context menu, testaa myös doubleclick" />
</StackPanel>
<!--- DockPanel ei välttämätön, ks kommentti
edellä -->
<DockPanel Grid.Row="1">
<ListBox
x:Name="kuvamatr"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ContextMenu="{StaticResource
kuvanMenu}"
MouseDoubleClick="KuvaLista_MouseDoubleClick">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<Border BorderBrush="LightGreen" BorderThickness="1"
CornerRadius="3"
Margin="1,4,0,0" >
<Image Source="{Binding Polkuz}"
Margin="5"
Width="144" Height="138" SnapsToDevicePixels="True"/>
</Border>
<Label
Content="{Binding Pvmz}" Padding="0"
HorizontalAlignment="Center"
/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel
Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</DockPanel>
</Grid>
</Window>
*************************************************************************
// 4.2.2018 MainWindow.xaml.cs (Kuvamatr_testi3)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
// Esitetään kuvajoukko matriisina siten, että oikeassa laidassa
on
// skrolli, jos kaikki kuvat eivät mahdu ikkunaan
// Tässä kuvajoukko on ListBoxissa, ja xaml:ssä koodattu Gridin
sisään
namespace Kuvamatr_testi3
{
// -------------------------------------------
// 28.3.2017
// Taulukon yksi rivi, edustaa kuvamatriisin
yhtä kuvaa
public class Kuvainfo
{
public int IDkoh { get; set;
} // kohde jossa kuva on
public string Pvmz { get;
set; }
public string Polkuz { get;
set; }
public Image Pikkukuva {
get; set; }
}
// -------------------------------------------
// 3.10.2017
public partial class MainWindow : Window
{
public List<Kuvainfo>
kuvajoukko; // tiedot kuvista
public MainWindow()
{
InitializeComponent();
kuvajoukko = new List<Kuvainfo>();
string
kansioz = @"C:\Users\erkki_000\Desktop\tilap\tyo\testikuvat";
for (int
i = 1; i < 16; i++)
{
Kuvainfo kif = new Kuvainfo()
{
Polkuz =
$"{kansioz}\\{i}.jpg",
Pvmz = $"{i}.7.2016",
IDkoh = i
};
kuvajoukko.Add(kif);
}
kuvamatr.ItemsSource = kuvajoukko;
}
//
-------------------------------------------
// 3.10.2017 T28
// Context Menun klikkaus
'Kohteen tiedot'
private void
MenuItemTiedot_Click(object sender, RoutedEventArgs e)
{
if
(kuvamatr.SelectedIndex == -1)
{
MessageBox.Show("Context Tiedot: Ei ollut
mitään valittu", "(T28-02) testi");
return;
}
var kif =
(Kuvainfo)kuvamatr.SelectedItem;
MessageBox.Show($"Nyt hakisimme tietoja kuvasta {kif.IDkoh}",
"(T28-03) Testi-ilmoitus");
}
//
-------------------------------------------
//
3.10.2017 T27
// Context Menun klikkaus
'Iso kuva'
private void
MenuItemKuva_Click(object sender, RoutedEventArgs e)
{
Kuvainfo
kif = (Kuvainfo)kuvamatr.SelectedItem;
if (kif
== null)
{
MessageBox.Show("Context Iso kuva: Mitään ei
ole valittu.", "(T27-02) Ilmoitus");
return;
}
MessageBox.Show($"nyt menisimme katsomaan kuvaa {kif.IDkoh}", "(T27-03)
Testi-ilmoitus");
}
//
-------------------------------------------
//
3.10.2017 T30
// Context Menun klikkaus
'Kopioi kuva'
private void
MenuItemKopioi_Click(object sender, RoutedEventArgs e)
{
Kuvainfo
kif = (Kuvainfo)kuvamatr.SelectedItem;
if (kif
== null)
{
MessageBox.Show("Context Kopioi: Mitään ei ole
valittu.", "(T30-02) Ilmoitus");
return;
}
MessageBox.Show($"Nyt kopioisimme katsomaan kuvan {kif.IDkoh} ",
"(T30-03) Testi-ilmoitus");
}
//----------------------------------------------------------
// 5.10.2017 T33
// Käyttäjä kaksoisklikkasi
kuvaa ja pääsee katsomaan isoa kuvaa
private void
KuvaLista_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
HitTestResult r = VisualTreeHelper.HitTest(this,
e.GetPosition(this));
if
(r.VisualHit.GetType() != typeof(Image))
{
MessageBox.Show("Et klikannut mitään kuvaa.",
"(T33-01) Ilmoitus");
return;
}
Kuvainfo
kif = (Kuvainfo)kuvamatr.SelectedItem;
if (kif
== null)
{
MessageBox.Show("Mitään ei ole valittu.",
"(T33-02) Ilmoitus");
return;
}
string mz
= "\nKokeile kaksoisklikata tyhjää paikkaa!";
MessageBox.Show($"Nyt menisimme katsomaan kuvaa {kif.IDkoh}.{mz}",
"(T33-03) Testi-ilmoitus");
}
//----------------------------------------------------------
// 4.2.2018
// Käyttäjä halusi poistua
private void
ButtonSulje_Click(object sender, MouseButtonEventArgs e)
{
this.Close();
}
//----------------------------------------------------------
// 4.2.2018 T31
// Käyttäjä haluaa katsoa
kuvan tietoja
private void
ButtonTiedot_Click(object sender, MouseButtonEventArgs e)
{
Kuvainfo
kif = (Kuvainfo)kuvamatr.SelectedItem;
if (kif
== null)
{
MessageBox.Show("Mitään ei ole valittu.",
"(T31-02) Ilmoitus");
return;
}
MessageBox.Show($"Nyt menisimme katsomaan kuvan {kif.IDkoh}
tietoja", "(T31-03) Testi-ilmoitus");
}
}
}
--------------------------------
(sivua muokattu 4.2.2018)