2014-09-29 2 views
7

Я пытаюсь добавить фоновое изображение, используя свойство изображения в кнопке. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу установить StreamImageSource в качестве фона кнопки. Я столкнулся с приведенной ниже ошибкой, если попытаюсь это сделать.Как установить ImageSource как Xamarin.Forms.Button?

Кодекс я использую, чтобы установить изображение:

  ImageSource iconsource =ImageSource.FromStream(() => new MemoryStream(ImgASBytes)); 
      Button Icon = new Button(); 
      Icon.Image = iconsource ; 

Ошибка я сталкиваюсь: CS0266

Ошибка: Не удается неявно преобразовать тип 'Xamarin.Forms.ImageSource' до «Xamarin. Forms.FileImageSource. Явное преобразование существует (вам не хватает литых?)

+0

Сообщение об ошибке сообщает, что кнопка ожидает 'FileImageSource'. Вы пытались повиноваться? – Athari

+0

Да .. Я сделал .. Свойство изображения только принимает путь к файлу в строке .. И мой вопрос заключается в том, как использовать ** imagesource для fileimagesource ** ?? –

ответ

10

ImageSource.FromStream() возвращает StreamImageSource (см. docs). Button.Image принимает только FileImageSource (см. docs).

Это означает, что то, что вы пытаетесь достичь, не сработает, как бы вы ни старались бросить один в другой.

Button.Image будет принимать изображения, сохраненные в качестве ресурсов в проектах на платформе, и нагруженные либо:

Icon.Image = ImageSource.FromFile ("foobar.png"); 

или

Icon.Image = "foobar.png"; 
+2

ImageSource.FromFile также возвращает экземпляр ImageSource. Итак, Icon.Image = ImageSource.FromFile («foobar.png»); также приводит к ошибке типа. Icon.Image = '' foobar.png "является действительным – Sreeraj

+0

@Sreeraj является правильным. Мы все еще не нашли правильный способ для этого. –

+0

@Sreeraj Также ищите это. – mamcx

1

Осторожнее с прописных и строчных букв в именах файлов.

Мне было интересно, почему мои кнопки-изображения были показаны правильно на симуляторе, но не на моем iPhone.

На устройстве имя файла должно совпадать точно, симулятор не заботится о верхнем и нижнем регистре в именах файлов.

1

Я использую это и работает

var imageA = new Image(); 
imageA.Source=(FileImageSource)ImageSource.FromFile(allergeneLocation)}; 

или

var imageA = new Image() 
{ 
BackgroundColor = Color.Teal, 
Source = (FileImageSource)ImageSource.FromFile(allergeneLocation)}, 
}; 
+0

Это настройка источника изображения, а не кнопки, как задает вопрос. – Kyle

+0

@kyle Я показывал, как он мог иметь дело с «Ошибка CS0266: Невозможно неявно преобразовать тип« Xamarin.Forms.ImageSource »в« Xamarin.Forms.FileImageSource ». Явное преобразование существует (вы пропали без вести слепок?)» вдохновляя из актеров я выполненные в моем примере – AlvynFash

0

Вот что я пробовал:

Button refreshBut = new Button 
     { 
      Image = (FileImageSource) 
      (ImageSource.FromFile("refreshBut.png")) 

     }; 

В то время как он компилирует тогда я получаю необработанное пустая ссылка исключение с описание: Ссылка на объект не установлена ​​в экземпляр объекта. Я не уверен, что это поможет кому-то еще попытаться решить это, но я на той же стене.

+0

Кнопка refreshBut = новая кнопка { Image =.„RefreshBut.png“ }; Вы можете просто используйте его вот так: –

+0

@FemilShajin всякий раз, когда я делаю это, я получаю пустое исключение, потому что он не может найти ресурс. – Schwagmister

0

Для всех, кто может спутать, от 1/30/2018

При использовании Image вида вы можете установить источник к изображению в пределах общего проекта или PCL. Это также показано в документации Xamarin по: here

При использовании button, вы не можете использовать исходное изображение, хранящееся в общем проекте или PCL, даже не тратить время, пытаясь, поскольку свойство Изображения button класса требует FileImageSource, который несовместим при обращении к изображениям в PCL или совместно используемом проекте.Однако вы можете использовать изображения, загруженные в ваши собственные проекты, и именно поэтому вы видите некоторых людей выше, говоря, что у них есть решение.

Смежные вопросы