Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Необходимо получить ImageSource из Button WPF C#

sora Мастер (1586), на голосовании 3 недели назад
Необходимо получить ImageSource "UserPhotoImage" из Button "IncreasePhotoBTN",
чтобы передать изображение с кнопки на другую форму.

Верстка самого Button выглядит так:
  
Картинка в кнопку вкидывается через Binding.
Саму фотографию мы берем из подключенной базы данных.

Почему я храню картинку именно в Button. Я хочу, чтобы пользователь, при нажатии на картинку, мог увеличить ее в размерах для детального просмотра (при этом для меня важны возможности Button, предоставляемые, в том числе, от плагина Material Design). Собственно для этого у меня есть ShowPhotoWindow.xaml, куда мне и нужно передать данный SourceImage для дальнейшей работы.

При обращении к кнопке возникает ошибка: "имя "IncreasePhotoBTN" не существует в текущем контексте" .

Соответственно в ресурсы кнопки мне тоже заглянуть не дозволено в таком случае. И вообще, не понятно, почему к другим кнопкам доступ есть, а именно к этой нет.

SelectedItem пробовал, но при нажатии элемент не выбирается. Работает только если мы сначала прокликаем необходимый элемент, и только тогда информация User'а вместе с необходимой фотографией при нажатии Button отправляется на следующую форму.

Что можете посоветовать, предложить?
Дополнен 1 месяц назад
Нашел решение:

Пришлось все же заменить Button. В моем случае, на Ellipse

<Ellipse x:Name="UserPhotoEllipse" Grid.Row="0" Height="150" Width="150" Margin="20" Stroke="#FFB7EF22" StrokeThickness="5" MouseLeftButtonDown="UserPhotoEllipse_MouseLeftButtonDown">
<Ellipse.Fill>
<ImageBrush x:Name="UserphotoImage">
<ImageBrush.ImageSource>
<Binding Path="photo">
<Binding.TargetNullValue>
<BitmapImage UriSource="\Resources\Images\NOPhotoImage.png" />
</Binding.TargetNullValue>
</Binding>
</ImageBrush.ImageSource>
</ImageBrush>
</Ellipse.Fill>
</Ellipse>

Далее код на UserPhotoEllipse_MouseLeftButtonDown:

if (e.ClickCount == 2)
{
try
{
ShowPhotoWindow showPhotoWindow = new ShowPhotoWindow(UsersLB.SelectedItem as User);
showPhotoWindow.ShowDialog();
}
catch (Exception)
{

}
}
Голосование за лучший ответ
Андрей Журавлев Мастер (2170) 1 месяц назад
Честно говоря не совсем понял что именно нужно, но для того чтобы в xaml можно было использовать картинку из ресурсов, то в ее свойстве нужно изменить "Build action" на "Resource" и прописать относительный путь, например:

  
Где ../ - подняться на 1 директорию выше.

ну либо ручками конвертить картинку в ImageSource и засовывать в контрол...
Конвертировать можно так:

  public static class Extensions 
{
public static BitmapSource ToBitmapSource(this Bitmap bitmap)
{
var stream = new MemoryStream();
bitmap.Save(stream, ImageFormat.Png);
stream.Seek(0, SeekOrigin.Begin);
return BitmapFrame.Create(stream);
}
}
Похожие вопросы