Een beetje cryptische omschrijven, maar weet niet hoe ik het goed kan verwoorden.
Ik heb een Listbox, waar ik allemaal images in laad. Dit wordt gedaan door een geneste class. Wanneer een user op een image klikt, wil ik dat de desbetreffende item class wordt aangepast. Om even met code te werken:
De code van de class
Nu probeer ik op een of andere manier af te dwingen dat bij een mouseup event, dat ik de desbetreffende TileInfo krijg. Bij een grid zijn er veel Tiles (gedefineerd als een class om TileInfo met een property Extra detailsen TileInfo) Uiteindelijk wil ik de tileinfo van de mouseup event uit de listbox gebruiken om die van de grid (ook een mouseup event met het zelfde probleem) te setten.
Om het kort te vragen, hoe krijg ik de volgende code voor elkaar:
Ik heb een Listbox, waar ik allemaal images in laad. Dit wordt gedaan door een geneste class. Wanneer een user op een image klikt, wil ik dat de desbetreffende item class wordt aangepast. Om even met code te werken:
C#:
1
2
3
4
5
6
7
8
9
10
11
| <CollectionViewSource x:Key="tileViewSource" d:DesignSource="{d:DesignInstance my:TileInfo, CreateList=True}" /> ... <ListBox SnapsToDevicePixels="True" Name="tilesControl" ItemsSource="{Binding Source={StaticResource tileViewSource}}"> <ListBox.ItemTemplate> <DataTemplate> <Image Name="tilesControl" Source="{Binding Path=ImageSource}" MouseUp="tilesControl_MouseUp"/> </DataTemplate> </ListBox.ItemTemplate> </ListBox> |
De code van de class
C#:
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
| public class TileInfo : INotifyPropertyChanged { private ImageSource _imageSource; public TileInfo(Point textureLocation) { var image = new BitmapImage(new Uri("Tiles.png", UriKind.Relative)); var cropRectangle = new Int32Rect((int)textureLocation.X * TileSize, (int)textureLocation.Y * TileSize, TileSize, TileSize); _imageSource = new CroppedBitmap(image, cropRectangle); } private const int TileSize = 16; private string _name; public string Name { get { return _name; } set { _name = value; if (PropertyChanged != null) PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name")); } } private int _additional; public int Additional { get { return _additional; } set { _additional = value; if (PropertyChanged != null) PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Additional")); } } public ImageSource ImageSource { get { return _imageSource; } set { _imageSource = value; if (PropertyChanged != null) PropertyChanged.Invoke(this, new PropertyChangedEventArgs("ImageSource")); } } public TileInfo(DrawingImage drawingImage) { ImageSource = drawingImage; if (PropertyChanged != null) PropertyChanged.Invoke(this, new PropertyChangedEventArgs("ImageSource")); } public event PropertyChangedEventHandler PropertyChanged; } |
Nu probeer ik op een of andere manier af te dwingen dat bij een mouseup event, dat ik de desbetreffende TileInfo krijg. Bij een grid zijn er veel Tiles (gedefineerd als een class om TileInfo met een property Extra detailsen TileInfo) Uiteindelijk wil ik de tileinfo van de mouseup event uit de listbox gebruiken om die van de grid (ook een mouseup event met het zelfde probleem) te setten.
Om het kort te vragen, hoe krijg ik de volgende code voor elkaar:
C#:
1
2
3
4
| private void tilesControl_MouseUp(object sender, MouseButtonEventArgs e) { private TileInfo tileInfo = ??? //sender is een image waarop geklikt is die uit een observableCollection komt } |