Я использую динамически загружаемые изображения для фона элементов сетки в шаблоне данных ItemsControl.
<ItemsControl Name="Category_Items" HorizontalContentAlignment="Stretch">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Margin="10" Name="WrapPanel" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Cursor="Hand" Margin="4,0,4,8" Width="{Binding Converter={StaticResource PercentageConverter}, ElementName=WrapPanel, Path=ActualWidth, ConverterParameter='0,25'}"
Height="{Binding Converter={StaticResource PercentageConverter}, Path=ActualWidth, RelativeSource={RelativeSource Self},ConverterParameter='0,6'}">
<Grid.Background>
<ImageBrush ImageSource="{Binding Logo, Converter={StaticResource ImageConverter}}" />
</Grid.Background>
<TextBlock Text="{Binding Name}" VerticalAlignment="Bottom" HorizontalAlignment="Left" Margin="5,0,0,5"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
как вы можете видеть, свойства ширины и высоты моих элементов сетки определяются фактической шириной WrapPanel и его собственной высотой.
Я использую класс конвертера ниже, чтобы получить uri изображения и загрузить его из Интернета.
public class ImageConverter : IValueConverter
{
public object Convert(object value,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
BitmapImage image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri(value as string, UriKind.Absolute);
image.CacheOption = BitmapCacheOption.None;
image.EndInit();
return image;
}
public object ConvertBack(object value,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
вроде нормально работает. Но изображения невидимы при загрузке. После перетаскивания или изменения размера главного окна отобразите изображения.
ОБНОВЛЕНИЕ Вот пользовательский интерфейс, который я пытаюсь создать.
Я попытался обновить пользовательский элемент управления после загрузки. Но это не помогло.
Любые идеи?
ConverterParameter='0,25'
не означает, что у вас четыре столбца? Очевидно, вы все еще не предоставили достаточно информации, чтобы предложить альтернативный подход. - person Clemens   schedule 01.07.2015