Я работаю над редактором уровня игры в WPF, используя C#.Как я могу использовать функцию C# для доступа к элементу управления WPF, который вызвал его?
У меня есть ряд элементов управления изображением для выбора текстур, и я хочу, чтобы каждое изображение было доступно для просмотра, с некоторой видимой обратной связью, чтобы показать, какой из них выбран.
Вот один из элементов управления изображением, наряду с зеленой подсветки границы, который показывает, когда он щелкнул:
<Image x:Name="tile_image1" Source="as asphalt_test.png" Stretch="Fill" HorizontalAlignment="Right" VerticalAlignment="Top" Width="50" Height="50" MouseDown="texture_click" Margin="0,93,69,0" RenderTransformOrigin="0.16,2.04"/>
<Border x:Name="tile_border" BorderBrush="Lime" BorderThickness="3" HorizontalAlignment="Right" Height="54" Margin="0,91,65,0" VerticalAlignment="Top" Width="54" Visibility="Hidden" />
Мой вопрос связан с функцией «texture_click».
Я хочу повторно использовать ту же функцию для каждого элемента управления изображением, которую я могу легко назначить с помощью атрибута MouseDown в XAML. Тем не менее, я не знаю, как сказать изнутри функции, которую вызвал контроль, или как получить доступ к свойству этого элемента управления, например, «.Source». Я хочу иметь возможность захватить имя файла изображения, а также переместить координаты зеленой границы за новым выбором.
Прямо сейчас, у меня просто есть жесткий код для первого управления изображением. Щелчки на других изображениях вызовут функцию, но функция будет выбирать только первое изображение (а не тот, который был на самом деле нажат).
// click on tile 1
private void texture_click (object sender, MouseButtonEventArgs e)
{
tile_border.Visibility = Visibility.Visible;
current_tilefile = tile_image1.Source;
string source_string = Convert.ToString (tile_image1.Source);
int last_slash = source_string.LastIndexOf ('/');
current_tile = source_string.Substring (last_slash + 1, 3);
}
Я попытался с помощью «отправителя», так как я думал, что может быть объектом, который называется функцией, но возвратила ошибку. Я также попытался вызвать функцию с помощью функции «texture_click (this)», но это тоже не было хорошо. Это были, по общему признанию, полные выстрелы в темноте, поэтому я не был удивлен.
Я все еще довольно новичок в этом программном обеспечении, поэтому любое понимание, которое вы, ребята, можете дать, было бы здорово.
'sender' должен быть объектом, который поднял событие. Какую ошибку вы получили? Вы убедились, что вы передаете 'object sender' в соответствующий тип управления? – Basic
какая у вас ошибка? – Rang
Ошибка: «объект» не содержит определения для «Источник». @Basic: Я не понял ваш вопрос о типе управления, пока не прочитал ответ МакГарнагле ниже. Я думаю, что бит «отправитель как изображение» - это то, о чем вы говорили. –