Я разрабатываю приложение для windows phone 7. Я новичок в приложении Windows Phone 7. У меня есть Listbox в моем приложении, и я динамически создаю элемент управления кнопки и добавляю его в элемент управления listbox. Теперь я хочу установить фоновое изображение для каждого динамически создаваемого элемента управления кнопки. Я использую следующий код для динамической установки цвета фона элемента управления кнопки
Button AlphabetButton = new Button();
AlphabetButton.Background = new SolidColorBrush(Colors.Red);
Таким образом, вместо цвета фона я хочу установить фоновое изображение для моего динамически создаваемого элемента управления кнопки. Как это сделать? Не могли бы вы предоставить мне какой-либо код или ссылку, с помощью которой я могу решить указанную выше проблему. Если я делаю что-то не так, пожалуйста, помогите мне.
Ответ 1 · рейтинг 6 · Boryana Miloshevska
Попробуй это:
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;
Будьте осторожны с действием сборки образа.
Ответ 2 · ColinE
Гораздо лучшим подходом было бы использовать привязку данных ... скажем, например, у вас есть список объектов 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, как показано ниже:
Создание кнопки изображения + текста с шаблоном управления?