Potrzebuję dodać do programu opcję wyświetlania obrazka, ponad którym będą znajdowały się w określonych pozycjach przyciski przykrywające jego określone fragmenty. Chodzi o pokazywanie obrazku pewnego urządzenia i nad przyciskami ze zdjęcia mają znaleźć się przyciski (Buttony), które będą przypisywać funkcje do określonych przycisków urządzenia. Nie zamotałem?
Testowo zrobiłem sobie klasę:
class HardwareButton
{
public int Left { get; set; }
public int Top { get; set; }
public string Text { get; set; }
}
(tam docelowo powinno być jeszcze width i height, ale na razie zostawmy)
oraz konwerter:
public class MarginConverter : IValueConverter
{
public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
HardwareButton v = (HardwareButton)value;
return new Thickness(v.Left, v.Top, 0, 0);
}
public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
I to w rezultacie daje mi całkiem fajną koncepcję:
<ItemsControl x:Name="con">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Text}" Margin="{Binding Converter={StaticResource marginConverter}}" Width="20" Height="20" HorizontalAlignment="Left" Click="Button_Click" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Kolekcja przycisków się binduje z ItemsControlem, pojedyncze przyciski są przedstawiane jako buttony, marginesy są poprawnie rozpoznawane... Tylko jeden problem - co będzie, kiedy zmienię rozmiar okienka? Left i Top nie są przecież względne, tylko absolutne wzorem kontenera. Więc hipotetyczny (wyżej przedstawiono przykład ;-)) obrazek w tle mi się zwiększy/zmniejszy, a przyciski znajdą się na błędnych pozycjach.
Więc pytanie jest - jak zrobić mniej więcej to samo, ale aby działało także dla zmienionych rozmiarów okienka/kontenera?