Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 3
Регистрация: 26.10.2013
Сообщений: 133
1

Пару неясностей по image в wpf

26.12.2014, 13:53. Показов 2370. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
1) Как сделать так, чтобы при наведении мышки на картинку появлялась другая картинка?
2) Как сделать чтобы при нажатии на картинку выполнялось какое-то действие?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2014, 13:53
Ответы с готовыми решениями:

Image в WPF
Столкнулся с проблемой. Я загружаю картинку с интернета, сохраняю её в папку с исполняемым файлом...

WPF Image
Такой вопрос.. Например я создал button и я хочу чтобы при нажатию на него я мог загрузить любую...

Canvas, Image WPF
Добрый день. У меня есть картинка которую я перетягиваю мышью, вращаю ее а также делаю зум ......

wpf save image
Здравствуйте подскажите как сохранить содержимое canvas в jpg

12
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
27.12.2014, 19:35 2
XML
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
<Window x:Class="Wpf_ImageExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:Wpf_ImageExample"
        Title="MainWindow"
        Width="525"
        Height="350"
        WindowStartupLocation="CenterScreen">
   <Grid>
 
      <Border x:Name="_border"
              Width="100"
              Height="100"
              HorizontalAlignment="Center"
              VerticalAlignment="Center"
              Background="#FFE5F7D2"
              BorderBrush="Coral"
              BorderThickness="3"
              MouseEnter="Border_MouseEnter">
 
         <Image x:Name="_image"
                IsHitTestVisible="True"
                MouseLeftButtonUp="Image_MouseLeftButtonUp" />
      </Border>
 
      <TextBlock Height="72"
                 Margin="0,23,0,0"
                 VerticalAlignment="Top"
                 FontSize="16"
                 Text="{Binding Message, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MainWindow}}}"
                 TextAlignment="Center"
                 TextWrapping="Wrap" />
   </Grid>
</Window>
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
67
68
69
70
71
72
73
74
75
76
77
78
using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
 
namespace Wpf_ImageExample
{
    public partial class MainWindow : Window
    {
        private int _index;
 
        public static readonly DependencyProperty MessageProperty = DependencyProperty.Register(
            "Message", typeof(string), typeof(MainWindow), new PropertyMetadata(default(string)));
 
        private DoubleAnimation _daHeight;
        private DoubleAnimation _daWidth;
 
        public MainWindow()
        {
            InitializeComponent();
 
            _daHeight = new DoubleAnimation(_border.Height, _border.Height + _border.Height / 4, new Duration(TimeSpan.FromMilliseconds(200)));
            _daHeight.AutoReverse = true;
            _daHeight.EasingFunction = new PowerEase() { Power = 0.4}; //new BackEase() { Amplitude = 6 };
 
            _daWidth = new DoubleAnimation(_border.Width, _border.Width + _border.Width / 4, new Duration(TimeSpan.FromMilliseconds(200)));
            _daWidth.AutoReverse = _daHeight.AutoReverse;
            _daWidth.EasingFunction = _daHeight.EasingFunction;
        }
 
        private void Border_MouseEnter(object sender, MouseEventArgs e)
        {
            if (_index + 1 == ContentProvider.Images.Length)
            {
                _index = 0;
            }
            else
            {
                _index++;
            }
 
            _image.Source = ContentProvider.Images[_index];
 
            Message = ContentProvider.Images[_index].UriSource.ToString();
        }
 
        public string Message
        {
            get { return (string)GetValue(MessageProperty); }
            set { SetValue(MessageProperty, value); }
        }
 
        private void Image_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            DoSomething(); //Какое-то действие
 
            _border.BeginAnimation(FrameworkElement.HeightProperty, _daHeight);
            _border.BeginAnimation(FrameworkElement.WidthProperty, _daWidth);
            
        }
 
        private void DoSomething()
        {
            switch (_index)
            {
                case 0: Background = Brushes.NavajoWhite;
                    break;
 
                case 1: Background = Brushes.LightSalmon;
                    break;
 
                case 2: Background = Brushes.BurlyWood;
                    break;
            }
        }
    }
}
Вложения
Тип файла: zip Wpf_ImageExample.zip (34.3 Кб, 11 просмотров)
0
30 / 30 / 18
Регистрация: 20.06.2012
Сообщений: 165
09.01.2015, 03:57 3
а можно не городить тонны не нужного кода и просто добавить события и менять картинку в зависимости от события простым старым методом:

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
 private void img_16_MouseEnter(object sender, MouseEventArgs e)
        {
                img_16.Source = new BitmapImage(new Uri("Resources/Resurs/TopRes1_2.png" , UriKind.Relative));
        }
        private void img_16_MouseLeave(object sender, MouseEventArgs e)
        {
                img_16.Source = new BitmapImage(new Uri("Resources/Resurs/TopRes1_1.png" , UriKind.Relative));
        }
        private void img_16_MouseDown(object sender, MouseButtonEventArgs e)
        {
                img_16.Source = new BitmapImage(new Uri("Resources/Resurs/TopRes1_3.png" , UriKind.Relative));
        }
        private void img_16_MouseUp(object sender, MouseButtonEventArgs e)
        {
                img_16.Source = new BitmapImage(new Uri("Resources/Resurs/TopRes1_2.png" , UriKind.Relative));
        }
        private void label6_MouseEnter(object sender, MouseEventArgs e)
        {
                img_16.Source = new BitmapImage(new Uri("Resources/Resurs/TopRes1_2.png" , UriKind.Relative));
        }
        private void label6_MouseLeave(object sender, MouseEventArgs e)
        {
                img_16.Source = new BitmapImage(new Uri("Resources/Resurs/TopRes1_1.png" , UriKind.Relative));
        }
        private void label6_MouseDown(object sender, MouseButtonEventArgs e)
        {
                img_16.Source = new BitmapImage(new Uri("Resources/Resurs/TopRes1_3.png" , UriKind.Relative));
        }
        private void label6_MouseUp(object sender, MouseButtonEventArgs e)
        {
                img_16.Source = new BitmapImage(new Uri("Resources/Resurs/TopRes1_2.png" , UriKind.Relative));
        }
0
53 / 53 / 18
Регистрация: 26.07.2012
Сообщений: 188
09.01.2015, 11:36 4
wmclik,

Согласен. Решение капера, на мой взгляд, неоправданно усложнено, да еще и константы в коде непонятного назначения. Просто если ТС спрашивает такую простоту, то, значит, он вообще не в теме и предлагать ему решение со свойствами зависимости и анимацией = еще больше его запутать.

зы. Возможно, каспер может объяснить чем его решение лучше классического подхода?
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
09.01.2015, 12:51 5
Цитата Сообщение от monstrilla Посмотреть сообщение
Согласен. Решение капера, на мой взгляд, неоправданно усложнено
Ну убери анимацию, оставь класс загружающий контент и метод Border_MouseEnter. Ты серьёзно считаешь это сложным кодом??? Просто попробуй его прочитать, а не мельком глянуть. Ничего сложного вообще нет.

Цитата Сообщение от monstrilla Посмотреть сообщение
да еще и константы в коде непонятного назначения.
Где? Я не нашёл.

Цитата Сообщение от monstrilla Посмотреть сообщение
Возможно, каспер может объяснить чем его решение лучше классического подхода?
Да в 100 раз лучше, чем тупо 1000 обработчиков с жёстко прописанными путями в каждом. Намного быстрее вносятся изменения в код и всё продолжает работать. Например можно очень легко изменить кол-во картинок ничего не мудря в коде.

Где-то указано, что нужно сделать как можно проще? Для маленького проекта, который пишется за часа 3 вообще пофиг какой вариант. Для большого 100% мой лучше. Вообще я нахожу странным использовать самые плохие способы, а не пытаться писать более менее гибкий код. Хотя если студент, которому плевать вообще что там и как, а лишь бы сдать, то вопросов нет.
0
30 / 30 / 18
Регистрация: 20.06.2012
Сообщений: 165
09.01.2015, 14:24 6
Каспер
Да в 100 раз лучше, чем тупо 1000 обработчиков с жёстко прописанными путями в каждом. Намного быстрее вносятся изменения в код и всё продолжает работать. Например можно очень легко изменить кол-во картинок ничего не мудря в коде.
Я предоставил вариант, менять картинки стандартно для эффекта кнопки с картинками, Не правильно понял вопроса, я и не думал что нужно было придумать слайд шоу с картинками. Для слайд шоу в пол не прикольно, я даже так и не додумался.

Добавлено через 14 минут
Casper-SC, еще маленький вопрос, если в проекте 3к картинок, к ним тоже по индексу обращаться?
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
09.01.2015, 14:42 7
Цитата Сообщение от wmclik Посмотреть сообщение
Casper-SC, еще маленький вопрос, если в проекте 3к картинок, к ним тоже по индексу обращаться?
Да. А какая разница сколько. Один код, сколько угодно картинок. Или отдельно под каждый случай переписывать код?
0
30 / 30 / 18
Регистрация: 20.06.2012
Сообщений: 165
09.01.2015, 15:00 8
Цитата Сообщение от Casper-SC Посмотреть сообщение
Да. А какая разница сколько. Один код, сколько угодно картинок. Или отдельно под каждый случай переписывать код?
Та я просто представляю какую нужно память иметь, чтоб запомнить, все картинки и их индексы, ну не пересчитывать же их каждый раз подряд, что бы вычислить индекс картинки
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
09.01.2015, 15:12 9
Цитата Сообщение от wmclik Посмотреть сообщение
Та я просто представляю какую нужно память иметь, чтоб запомнить, все картинки и их индексы, ну не пересчитывать же их каждый раз подряд, что бы вычислить индекс картинки
Ну тут от задачи зависит, я же не знаю, что там за задача. Если нужно по порядку играть, то по индексам, если нет, то можно, словарь создать, к примеру, где ключи это перечисление и по ним доступ получать. Да как угодно можно сделать, всё от конкретной задачи зависит.
0
53 / 53 / 18
Регистрация: 26.07.2012
Сообщений: 188
09.01.2015, 16:48 10
Casper-SC,

Ты серьёзно считаешь это сложным кодом??? Просто попробуй его прочитать, а не мельком глянуть. Ничего сложного вообще нет.
Я считаю, что решение неоправданно усложнено. Это разные вещи. Для ТС, несомненно, ваше решение более сложное, чем то, что предложил wmclik. Странно, что это нужно объяснять.

да еще и константы в коде непонятного назначения.
4, 0.4, 200 - константы, да еще и повторяющиеся.

Где-то указано, что нужно сделать как можно проще? Для маленького проекта, который пишется за часа 3 вообще пофиг какой вариант. Для большого 100% мой лучше.
Нигде и не сказано, что задача требует более сложного решения. Делать как можно проще велит здравый смысл. Представленная задача тривиальна, а ваше решение требует понимания концепций свойств зависимости и анимации. Зачем? Это называется стрелять из пушки по воробьям.

У вас очень агрессивная реакция на мягкую критику.
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
09.01.2015, 17:36 11
Цитата Сообщение от monstrilla Посмотреть сообщение
4, 0.4, 200 - константы, да еще и повторяющиеся.
Скорее литералы. Из контекста всё предельно ясно. Если нужно, то есть справка, из которой будет ясно для чего они.

Цитата Сообщение от monstrilla Посмотреть сообщение
Представленная задача тривиальна, а ваше решение требует понимания концепций свойств зависимости и анимации. Зачем?
Так в чём проблема, это просто до кучи, не нужно, удаляйте.
Ну да, у меня на работе тоже задач много тривиальных, и если бы я их все делал как можно проще, то любое минимальное изменении в коде превратилось бы в ад. Надо сразу писать стараться хотя бы более-менее гибко. И уж точно не дублировать пути к картинкам. А если путь изменится? А такое вполне возможно.

Цитата Сообщение от monstrilla Посмотреть сообщение
Нигде и не сказано, что задача требует более сложного решения.
Задача решена не сложно. А чтобы в обработчике картинку загрузить много ума не надо. Ещё что удивительно, каждый раз создаётся новый BitmapImage.

Добавлено через 2 минуты
Цитата Сообщение от monstrilla Посмотреть сообщение
У вас очень агрессивная реакция на мягкую критику.
Это только так кажется.
0
53 / 53 / 18
Регистрация: 26.07.2012
Сообщений: 188
09.01.2015, 17:57 12
Скорее литералы
Как ни назови, а суть одна. Захочу поменять значение - шерстить код и менять в нем, и если в одном месте забыл поменять (они ведь повторяются) получится вообще нехорошо. Вот опять же:

C#
1
2
static readonly string ResourcesUri = "/" + Assembly.GetExecutingAssembly().GetName().Name + ";component/Resources/";
Image1 = new BitmapImage(new Uri(UriPack + ResourcesUri + Pictures + "1.jpg", UriKind.Absolute));
Ну да, у меня на работе тоже задач много тривиальных, и если бы я их все делал как можно проще, то любое минимальное изменении в коде превратилось бы в ад. Надо сразу писать стараться хотя бы более-менее гибко. И уж точно не дублировать пути к картинкам. А если путь изменится? А такое вполне возможно.
Да, да, хардкод - зло и все мы понимаем, чем чреват, но софткод не меньшее зло. Нужно понимать, что мы сейчас обсуждаем не абстрактные задачи, не реальные задачи с работы, а конкретную, которую поставил ТС. Те или иные подходы нужно применять по делу, обоснованно, а не бездумно, просто потому, что "а я же в прошлый раз так делал, тут тоже так сделаю".

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

Я вообще не понимаю зачем этот огород с массивом и циклической сменой картинок. Насколько я понял, нужно всего два состояния, т.е. две картинки - дефолтное и MouseOvered. Да и работает вся система только при допущении, что картинки названы определенным образом - x.jpg

Ещё что удивительно, каждый раз создаётся новый BitmapImage.
Это можно допилить, так же как и путь к картинкам. Т.е. вынести в константы как у вас.

Это только так кажется.
Ок
0
30 / 30 / 18
Регистрация: 20.06.2012
Сообщений: 165
09.01.2015, 17:58 13
Цитата Сообщение от Casper-SC Посмотреть сообщение
А если путь изменится?
это в том случае если вы перенесете папку с картинками отдельно от самой программы, но тут даже не поможет
C#
1
Assembly.GetExecutingAssembly().GetName().Name
, а если картинки встроены то тут вообще волноваться незачем.
0
09.01.2015, 17:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2015, 17:58
Помогаю со студенческими работами здесь

[WPF] Image to base64
в найденных примерах попадается примерно такое using (Image image = Image.FromFile(Path)) { ...

Image в WPF (качество)
Привет всем, Вопрос такой: Дело дошло до image, и что я заметил, что качество image оставляет...

WPF анимация вращения image
Как сделать анимацию вращения image из XAML кода, есть примеры которые используют код C#, в нем...

[WPF] Image binding template
Столкнулся с проблемой - необходимо изменить шаблон для кнопки таким образом, что бы в разметке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru