Не найдено свойство имени Изображение для кнопки на Windows Phone

У меня возникает проблема, которую я не понимаю. У меня есть кнопка с изображением, определенным следующим кодом:

<Button Image="SearchFilterIcon.png"
              Grid.Row="0"
              Grid.Column="1"
              Clicked="OnButtonFilterClicked" />

Это хорошо работает на Android. Изображение отображается на моей кнопке, но когда я запускаю приложение Windows Phone, я получаю XamlParseException, в котором говорится, что: Не найдено свойство имени Image.

Как это возможно? Виджет «Кнопка» не одинаков на Android и Windows Phone?


person Alexandre D.    schedule 16.10.2014    source источник
comment
Я не могу воспроизвести эту проблему на Windows-телефоне. не могли бы вы найти время, чтобы сообщить об этом? Спасибо   -  person Stephane Delcroix    schedule 27.10.2014
comment
Привет, Александр, как заметил @StephaneDelcroix, в моем XAML была опечатка, когда я перепроверял. Могу ли я попросить вас воспроизвести небольшой пример и отправить мне по электронной почте, чтобы я мог исследовать вашу конкретную проблему и, надеюсь, получить правильное решение для вас, поскольку может быть какая-то другая проблема, с которой вы столкнулись? Мои контактные данные есть в моем профиле. Спасибо.   -  person Pete    schedule 27.10.2014


Ответы (4)


Если вы сделаете следующее: -

Button objButton1 = new Button();
objButton1.Image = (FileImageSource)ImageSource.FromFile("testImage1.png");
objStackLayout.Children.Add(objButton1);
this.Content = objStackLayout;

Тогда он будет работать (через код программной части).

Элемент управления Button всегда имел свойство Image, даже в Xamarin.Forms v1.2.2x, так что это < strong>является не новым свойством и не имеет ничего общего с установкой последних пакетов.

В качестве обходного пути, возможно, вам следует рассмотреть возможность присвоения кнопке XAML x:Name, например:

<Button x:Name="myButton1"/>

А затем назначьте изображение из code-behind:-

myButton1.Image = (FileImageSource)ImageSource.FromFile("testImage1.png");

Обновление 1

Это был случай использования очень старых библиотек (v1.0.6186). После повторного обновления проекта до последних двоичных файлов для версии 1.2.3x все работает нормально.

person Pete    schedule 16.10.2014
comment
Работает как шарм! Как вы сказали, это, скорее всего, ошибка в XAML. Назначение ImageSource в коде позади решило мою проблему. Спасибо, Пит. Тем не менее, я решил свою проблему раньше, используя ImageButton Xamarin Forms Labs: github.com/XLabs/Xamarin-Forms-Labs/wiki/ImageButton - person Alexandre D.; 16.10.2014
comment
Элемент управления «Кнопка» всегда имел свойство «Изображение», неверное - person Stephane Delcroix; 16.10.2014
comment
Я не говорю всегда в своем ответе — я имею в виду конкретную версию из. В Xamarin.Forms.Core v1.2.2x при переходе к Кнопке Просмотр действительно отображается Image как свойство, возвращающее FileImageSource. Я проверил бинарный файл v1.2.2x, чтобы подтвердить это. - person Pete; 16.10.2014
comment
@Pete Пит, я не могу воспроизвести это на WP. Не могли бы вы открыть тикет Bugzilla с вашим тестовым кодом? Спасибо. - person Stephane Delcroix; 27.10.2014
comment
либо есть проблема с копированием/вставкой, либо проблема заключается в отсутствующей букве «t» в Buton позиции 17:6. Тип Кнопка не найдена - person Stephane Delcroix; 27.10.2014
comment
@StephaneDelcroix - Ваше право. Я пересмотрел XAML, и у меня все еще была закомментирована версия, которая «не работала». В нем действительно была только одна буква «т», как в «Бутон» — так что здесь опечатка. В моем примере это работает, если я вставлю правильный тег «Кнопка». Я собираюсь отправить сообщение Александру для получения дополнительной информации и тестового проекта, чтобы попытаться получить от него версию, чтобы воспроизвести ошибку и исследовать его сценарий. После этого я обновлю информацию здесь. - person Pete; 27.10.2014
comment
так что по крайней мере я не совсем сумасшедший - person Stephane Delcroix; 27.10.2014
comment
подтвердил, что вы не сумасшедший :-) - Visual Studio всегда показывает подчеркивание для любого типа и перечисляет множество ошибок в редакторе XAML, поэтому я просто закрыл файл .xaml и не подумал об этом. Я ожидал, что проверка типов, по крайней мере, будет выполнена при компиляции, но, очевидно, это не так и выполняется только во время выполнения. - person Pete; 27.10.2014
comment
Я удалил свою XAML-часть ответа, так как это была опечатка в моем xaml, которая не была помечена компилятором Xamarin и позволяла приложению запускаться и отключаться во время выполнения. Как только я получу больше информации от @AlexandreD, я смогу более подробно изучить его конкретную проблему и повторно обновить ответ. - person Pete; 28.10.2014
comment
Извините за опоздание, ребята. Я попытался создать небольшой проект, чтобы воспроизвести проблему. Дело в том, что на этот раз я получаю ошибку и на Android. И WP запускает TargetInvocationException. - person Alexandre D.; 29.10.2014
comment
Хочешь, я рассмотрю оба вопроса? - person Pete; 29.10.2014
comment
Да, почему бы и нет. Было бы здорово ! Высылаю вам проект. Я думаю, что проблема исходит от меня, но не уверен. - person Alexandre D.; 29.10.2014
comment
Я не получил исключение, о котором вы упомянули в последний раз, но смог решить проблему в файлах, которые вы отправили. Вы все еще ссылались на версию 1.0.6186 библиотек Xamarin. Я удалил и повторно обновил все проекты до последних версий v1.2.3x. Проверьте свою электронную почту на наличие файлов. Я тестировал его как на Android, так и на WindowsPhone. - person Pete; 29.10.2014
comment
Обновленный ответ (см. Обновление 1) - person Pete; 29.10.2014
comment
Это работает хорошо. Хорошая работа Пит! Однако можете ли вы объяснить мне, как вы меняли версии библиотек Xamarin через Visual Studio? - person Alexandre D.; 30.10.2014
comment
Инструменты Go › NuGet Manager › Управление пакетами NuGet. Затем в этом случае мне пришлось удалить, поэтому удалите Xamarin.Forms из вашего проекта отсюда и дайте ему удалить, а затем вернитесь, найдите Xamarin.Forms на вкладке «В сети», нажмите «Установить» и выберите проекты для установить его на. Обратите внимание - вам не придется делать это снова. Для обновления в будущем по-прежнему перейдите в раздел «Управление пакетами NuGet», но теперь на вкладке «Обновления» вы увидите «Обновить» для любого пакета NuGet, для которого есть обновления. - person Pete; 30.10.2014
comment
Идеальное объяснение. Спасибо за помощь, Пит. - person Alexandre D.; 30.10.2014

Button.Image доступен на WP, так же как и на iOS и Android. Вероятно, у вас не установлена ​​последняя версия nuget (1.2.3) для WP или установлено несколько версий.

person Stephane Delcroix    schedule 16.10.2014
comment
Какой пакет nuget вы имеете в виду? - person Stephan; 16.10.2014

Кнопки в XAML для Windows Phone просто не предоставляют свойство Image. Таким образом, вы не можете добавить изображение на кнопку, поскольку API этого не поддерживает. Что вам нужно сделать, так это создать шаблон элемента управления, содержащий текст и изображение.

Кнопка документация

person Stephan    schedule 16.10.2014
comment
Спасибо за ваш ответ. Дело в том, что я использую технологию Xamarin.Forms, поэтому не кнопка Windows Phone, а кнопка Xamarin.Forms предоставляет свойство Image, как показано по следующему URL-адресу: iosapi.xamarin.com/?link=P%3aXamarin.Forms.Button.Image - person Alexandre D.; 16.10.2014
comment
Ага. Но, насколько я понимаю (но я могу ошибаться, поскольку я не уверен на 100%), Xamarin.Forms в некоторой степени совместим с Windows Phone XAML, но он не работает на Windows Phone, как на Android, MacOS и iOS. В документации, на которую вы ссылаетесь по ссылке, вы можете увидеть, что вы можете просто выбрать эти три системы в раскрывающемся списке в левом верхнем углу, а не Windows Phone. Поэтому я думаю, что Windows Phone XAML ~ Xamarin.Forms, но они не равны. Таким образом, вы можете выполнять большую часть кода Xamarin.Forms на Windows Phone, но не весь. Пожалуйста, поправьте меня, если я ошибаюсь. - person Stephan; 16.10.2014
comment
Ваши рассуждения кажутся абсолютно логичными. Я не думал об этом, и я думаю, что вы правы. Вот почему у меня возникают проблемы совместимости между моим приложением для Android и моим приложением для Windows Phone. Итак, если я правильно понимаю, для разработки кросс-платформенного приложения с технологией Xamarin.Forms, которое было бы совместимо с Windows Phone, мне нужно написать код XAML, который работает в обычном приложении Windows Phone, не так ли? Что касается шаблона управления, о котором вы говорили, будет ли этот элемент управления использоваться на каждой платформе? т. е. мне не нужно использовать свойство Image кнопки Xamarin.Forms для Android и iOS? - person Alexandre D.; 16.10.2014
comment
Да, вы должны написать код XAML, который работает на Windows Phone. Что касается шаблона управления, я, честно говоря, не знаю. Быстрый поиск в Google не дал мне ответа на этот вопрос, и в настоящее время у меня нет установленного Xamarin, чтобы проверить его. - person Stephan; 16.10.2014

Попробуйте что-нибудь вроде:

<Button Click="OnButtonFilterClicked">
                    <Button.Background>
                        <ImageBrush Stretch="Fill" ImageSource="/SearchFilterIcon.png"/>
                    </Button.Background>
                </Button>

вместо свойств «Clicked» и «image».

person iakwvina    schedule 16.10.2014
comment
Хорошая попытка, но ImageBrush не совместим с Xamarin.Forms, поэтому я не могу его использовать. - person Alexandre D.; 16.10.2014