Как установить фоновое изображение для динамически создаваемого элемента управления кнопкой?

Я разрабатываю приложение для windows phone 7. Я новичок в приложении Windows Phone 7. У меня есть Listbox в моем приложении, и я динамически создаю элемент управления кнопки и добавляю его в элемент управления listbox. Теперь я хочу установить фоновое изображение для каждого динамически создаваемого элемента управления кнопки. Я использую следующий код для динамической установки цвета фона элемента управления кнопки

Button AlphabetButton = new Button();
                AlphabetButton.Background = new SolidColorBrush(Colors.Red);

Таким образом, вместо цвета фона я хочу установить фоновое изображение для моего динамически создаваемого элемента управления кнопки. Как это сделать? Не могли бы вы предоставить мне какой-либо код или ссылку, с помощью которой я могу решить указанную выше проблему. Если я делаю что-то не так, пожалуйста, помогите мне.


person Shailesh Jaiswal    schedule 08.02.2011    source источник


Ответы (2)


Попробуй это:

    ImageBrush brush = new ImageBrush();
    brush.ImageSource = new BitmapImage(new Uri(@"Images/myImage.png", UriKind.Relative)); 
    AlphabetButton.Background = brush;

Другой вариант - использовать содержимое кнопки, например:

   Uri uri = new Uri("/images/someImage.png", UriKind.Relative);  
   BitmapImage imgSource = new BitmapImage(uri);
   Image image = new Image();
   image.Source = imgSource;
   AlphabetButton.Content = image;

Будьте осторожны с действием сборки образа.

person Boryana Miloshevska    schedule 08.02.2011

Гораздо лучшим подходом было бы использовать привязку данных ... скажем, например, у вас есть список объектов Person, которые вы хотите отобразить в своем списке, в выделенном коде установите список как ItemsSource:

public class Person()
{
  public string Name {get; set;}
}

var persons = new List<Person>();
// ... add some person objects here ...
listBox.ItemsSource = persons

Затем в вашем XAML вы можете предоставить DataTemplate, который отображает каждого человека как кнопку:

<ListBox x:Name="listBox">
  <Listox.ItemTemplate>
     <DataTemplate>
        <Button Content={Binding Path=Name}/>
     </DataTemplate>
  </Listox.ItemTemplate>
</ListBox>

Это отобразит список кнопок, отображающих имя каждого человека.

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

<ListBox x:Name="listBox">
  <Listox.ItemTemplate>
     <DataTemplate>
        <Button>
          <StackPanel Orientation="Horizontal">
             <TextBlock Text="{Binding Path=Name}"/>
             <ImageText Source="{Binding Path=Image}"/>
          </StackPanel>
        </Button>
     </DataTemplate>
  </Listox.ItemTemplate>
</ListBox>

Конечно, вам нужно будет добавить свойство ImageSource к вашему объекту Person:

public class Person()
{
  public string Name {get; set;}
  public ImageSource Image {get; set;}
}

Другой альтернативой является использование преобразователя значений для преобразования некоторого свойства вашего человека в изображение:

Привязка динамического источника изображения в silverlight

Если вы не хотите использовать привязку (что я лично считаю лучшим подходом), вы можете создать подкласс Button, который имеет свойство ImageSource, как показано ниже:

Создание кнопки изображения + текста с шаблоном управления?

person ColinE    schedule 08.02.2011