С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
2 / 2 / 2
Регистрация: 06.11.2014
Сообщений: 36
1

Не работает заполнение области изображением, ImageBrush

24.06.2017, 10:43. Показов 2217. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пример отсюда: https://msdn.microsoft.com/ru-... .110).aspx

XML
1
2
3
4
5
6
7
<StackPanel>
    <TextBox Name="myTextBox" TextChanged="OnTextBoxTextChanged" Width="200">
      <TextBox.Background>
        <ImageBrush ImageSource="Images/12.jpeg" AlignmentX="Left" Stretch="None" />
      </TextBox.Background>
    </TextBox>
  </StackPanel>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private void OnTextBoxTextChanged(object sender, TextChangedEventArgs e)
        {
            if (myTextBox.Text == "")
            {
                // Create an ImageBrush.
                ImageBrush textImageBrush = new ImageBrush();
                textImageBrush.ImageSource =
                    new BitmapImage(
                        new Uri("Images/12.jpeg", UriKind.Relative)
                    );
                textImageBrush.AlignmentX = AlignmentX.Left;
                textImageBrush.Stretch = Stretch.None;
                // Use the brush to paint the button's background.
                myTextBox.Background = textImageBrush;
            }
            else
            {
                myTextBox.Background = null;
            }
        }
Код xaml работает, фон текстового поля заполняется картинкой.
Ввожу текст в TextBox, удаляю, выскакивает исключение:
Необработанное исключение типа "System.IO.DirectoryNotFoundException" в PresentationCore.dll
Дополнительные сведения: Не удалось найти часть пути D:\WPF\ProjectVS2015\ImageProject\ImageProject\bin\Debug\Images\12.jpeg".

Делаю другой пример. Пробую залить картинкой прямоугольник, форма окрашивается в черный цвет, никакая картинка не выводится.
XML
1
2
<Grid x:Name="LayoutRoot">
</Grid>
C#
1
2
3
4
5
6
7
8
9
10
11
12
private void CreateAnImageBrush2()
        {
            Rectangle blueRectangle = new Rectangle();
            blueRectangle.Height = 100;
            blueRectangle.Width = 200;
            
            ImageBrush imgBrush = new ImageBrush();
            imgBrush.ImageSource = new BitmapImage(new Uri("Images/12.0.jpeg", UriKind.Relative));
            blueRectangle.Fill = imgBrush;
 
            LayoutRoot.Children.Add(blueRectangle);
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.06.2017, 10:43
Ответы с готовыми решениями:

QCameraViewfinder выравнивание области с изображением
Изображение с вебки отображается на QCameraViewfinder. Само изображение отображается...

Заполнение фона изображением
Как можно сделать заполнение фоновым изображением? (Чтобы картинка калибровалась по центру и края...

Заполнение динамического контрола изображением
Создаю контрол в отчёте и безрезультатно пытаюсь присвоить ему значение из recordset: Dim...

Не работает фон с изображением
Не срабатывает фон, он вообще прозрачный &lt;div id=&quot;promo&quot;&gt; &lt;h1 id=&quot;promoText&quot;&gt; Новый...

3
3 / 3 / 4
Регистрация: 03.08.2014
Сообщений: 19
26.06.2017, 13:13 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
<TextBox
            x:Name="textBox"
            Width="135"
            Height="23"
            Margin="756,123,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            BorderBrush="Black"
            Text=""
            TextWrapping="Wrap">
            <TextBox.Style>
                <Style TargetType="{x:Type TextBox}">
                    <Setter Property="Background">
                        <Setter.Value>
                            <ImageBrush ImageSource="bullet-green.png" AlignmentX="Left" Stretch="None" />
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=Text.Length, ElementName=textBox}" Value="0">
                            <Setter Property="Background">
                                <Setter.Value>
                                    <ImageBrush ImageSource="{x:Null}" Stretch="None" />
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBox.Style>
        </TextBox>
0
2 / 2 / 2
Регистрация: 06.11.2014
Сообщений: 36
27.06.2017, 19:39  [ТС] 3
Через xaml работает, я об этом написал. Не получалось изменить фон динамически. Сегодня такая же проблема возникла с относительным путем до текстового файла. Тут и подумал, что ни с того бока захожу. Проблему решил, только когда поставил в свойствах файла Внедренный ресурс и Всегда копировать. До этого перерыл кучу тем относительного пути и не встретил ни полунамека на такой нюанс)

Добавлено через 3 часа 23 минуты
Поторопился я с выводами. При втором запуске выскочило исключение "System.Windows.Markup.XamlParseException".

Код xaml будет работать, если свойства картинки Resource, Не копировать.
C#
1
<ImageBrush ImageSource="Images/12.jpeg"/>
А код в главном классе, если свойства картинки Внедренный ресурс, Всегда копировать.
C#
1
textImageBrush.ImageSource = new BitmapImage( new Uri("Images/12.jpeg", UriKind.Relative) );
Как можно устранить эти противоречия?
0
2 / 2 / 2
Регистрация: 06.11.2014
Сообщений: 36
03.07.2017, 08:00  [ТС] 4
Ну, посмотрите уже кто-нибудь этот пример:
https://msdn.microsoft.com/ru-... .110).aspx
Лежит на официальном сайте, но он никак не может работать.
Также в различных источниках читаю "Для приложений WPF рекомендуется всегда использовать значение Resource (Ресурс)". Но в таком случае относительный путь new Uri(@"TextBoxBackground.gif", UriKind.Relative) никак не может быть исполнен, т.к. без свойства файла None, Copy if newer никакого файла в ... bin\Debug не будет.

Добавлено через 22 часа 52 минуты
Решено.
Банально перепробовал все свойства картинки в различных комбинациях, и все заработало при свойствах Content+Copy always или Content+Copy if newer.
1
03.07.2017, 08:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.07.2017, 08:00
Помогаю со студенческими работами здесь

Не могу поставить подпись под изображением и над изображением, и как изображение разместить в центре страницы
Вот сам код и скриншот что нужно сделать &lt;!DOCTYPE HTML PUBLIC &quot;-/W3C//DTD HTML 4.01...

Плохое качество ImageBrush
Подскажите пожалуйста: (приложение WPF) Хочу на бекгроунд формы поставить картинку. Использую...

Удалить изображение из ImageBrush
Имеется форма. На ней Border и Button. У Border на фоне стоит картинка из папки &quot;c:\Pfolder&quot;....

Заполнение области матрицы значениями
Всем привет. Делаю свой проект, не задание. Столкнулся с тем, что мне нужно заполнить область...


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

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