Привязка источника изображения в шаблоне данных XAML к URI в Silverlight 4 - PullRequest
0 голосов
/ 15 июля 2011

Хорошо, я пытаюсь создать список изображений (используя список) с миниатюрой слева и заголовком изображения справа.Мой XAML настроен следующим образом:

<ListBox HorizontalAlignment="Left" Margin="6,6,0,6" Name="CurrentPhotos" Width="184" SelectionChanged="CurrentPhotos_SelectionChanged">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Image Source="{Binding Converter={StaticResource FilePathConverter}}" />
                <sdk:Label Content="{Binding Title}"></sdk:Label>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

У меня есть ключ FilePathConverter, определенный в App.xaml, и установлен код:

public class FilePathConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (targetType == typeof(string))
        {
            return (value as PhotoSummary).FullThumbPath();
        }
        else
        {
            return (value as PhotoSummary).Thumb();
        }

    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

В обоих есть точки остановаМетоды Convert и ConvertBack.ConvertBack никогда не запускается (поэтому нет исключений и т. Д.), И в методе Convert Thumb возвращается правильно (строковый ввод оставлен для некоторых целей теста и в настоящее время не используется. В любом случае он не запускается), и метод расширения Thumb это:

public static object Thumb(this PhotoSummary ps)
{
    Uri uri = new Uri("http://" + Settings.Host + "/Content/Thumbs/" + ps.Uploaded.Year + "/" + ps.Uploaded.Month + "/" + ps.ID + ".jpg", UriKind.Absolute);
    return new BitmapImage(uri);
}

Этот вызывается, и Uri правильно создан (проверено несколько раз).Однако, когда я запускаю приложение, список содержит только заголовок фотографии, а изображения там нет.Все изображения маленькие (они просто большие), локальные файлы, поэтому их нужно загружать мгновенно, чтобы это тоже не было проблемой загрузки.Но, как будто там нет изображения тега.Он просто отображает метки фотографий.Конвертер работает, Uri верный, ошибок нет вообще, но изображение не отображается.

Есть предложения?

Ответы [ 3 ]

1 голос
/ 16 июля 2011

Хорошо, проблема была в ограничении безопасности в SL.Он работал локально, и из-за ограничений безопасности (по крайней мере, для изображений) совершать вызов на http://localhost... не удалось.Я читал, что если я создаю тестовую страницу, запускаю с локального сервера и т. Д., А затем запускаю ее, ошибка исчезнет, ​​но вместо этого обходного пути я только что проверил, требуется повышенное доверие, и она внезапно начала работать.Так что вопрос решен.

1 голос
/ 15 июля 2011

Возможно, вам придется явно загрузить изображение в конвертере. На странице MSDN для BitmapImage показан следующий фрагмент кода:

// Create the image element.
Image simpleImage = new Image();    
simpleImage.Width = 200;
simpleImage.Margin = new Thickness(5);

// Create source.
BitmapImage bi = new BitmapImage();
// BitmapImage.UriSource must be in a BeginInit/EndInit block.
bi.BeginInit();
bi.UriSource = new Uri(@"/sampleImages/cherries_larger.jpg",UriKind.RelativeOrAbsolute);
bi.EndInit();
// Set the image source.


simpleImage.Source = bi;
0 голосов
/ 08 февраля 2012

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

<DataTemplate x:Key="DataTemplate1">
        <Grid>
            <Image Margin="0" Width="25" Height="25" Source="{Binding EventType, StringFormat=/Icons/EventType\{0:d\}.png}"/>
        </Grid>
    </DataTemplate>

И это работает хорошо.Это шаблон данных для DataGrid, где этот EventType является перечислением типов.

это то, что fiddler показывает позже

http://www.localdomain.loc/ClientBin/Icons/EventType1.png
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...