Как установить фоновое изображение для динамически создаваемой кнопки управления? - PullRequest
2 голосов
/ 08 февраля 2011

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

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

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

Ответы [ 2 ]

6 голосов
/ 08 февраля 2011

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

    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;

Будьте осторожны с изображением Build Action.

0 голосов
/ 08 февраля 2011

Гораздо лучшим подходом было бы использование привязки данных ... скажем, например, у вас есть список объектов Person, которые вы хотите отобразить в вашем списке, в codebehind установите список как 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 следующим образом:

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

...