Формат строки привязки не работает

У меня есть приложение, которое при запуске пользователю нужно выбрать тему курса и название курса. Темы курса собираются из папки в папке данных приложения для программного обеспечения.

Я хочу отображать темы, как Office, например, в Word, где вы можете выбрать шаблоны для начала. В папке темы есть png изображение темы, которую я хочу отобразить. Если я скопирую и вставлю прямой путь следующим образом:

<Image Width="600" Height="400" HorizontalAlignment="Center"   Source="C:\Users\james\AppData\Roaming\Jenison\Perform\Themes\TemplateThemes\JenisonOnyxFullScreen\thumbnail.png"    />

Это работает нормально. Но, очевидно, у каждого пользователя будет другое имя пользователя, поэтому я не могу сделать это таким образом. Итак, я пытаюсь так:

  <Image Width="600" Height="400" HorizontalAlignment="Center" Source="{Binding ThumbnailPath, StringFormat='pack://application:,,,/Themes/TemplateThemes/{0}'}"   />

Привязка ThumbnailPath возвращает JenisonOnyxFullScreen\thumbnail.png, поэтому вышеприведенное — это pack://application:,,,/Themes/TemplateThemes/JenisonOnyxFullScreen\thumbnail.png, и я также добавил это в текстовый блок, и путь выглядит нормально. Но изображение не показывает этот путь.

Любая помощь будет оценена.


person James Blackburn    schedule 07.01.2016    source источник
comment
вы не можете привязать источник к свойству DataContext?   -  person Muds    schedule 07.01.2016
comment
попробуйте добавить идентификатор для вашего изображения и добавить источник в программный код С#..   -  person rdn87    schedule 07.01.2016
comment
Я думаю, что мне придется в конечном итоге сделать это, но с тем, как все сделано, это займет довольно много работы.   -  person James Blackburn    schedule 07.01.2016


Ответы (2)


Коллега по работе предложил что-то, что сработало с первого раза. Я добавил установщик событий к изображению следующим образом:

   <Image Width="450" Height="400"  HorizontalAlignment="Center" >
                            <Image.Style>
                                <Style TargetType="Image">
                                    <EventSetter Event="Loaded" Handler="ThemeImagePath">

                                    </EventSetter>
                                </Style>
                            </Image.Style>
                        </Image>

Затем в отделенном коде добавлен метод ThemeImagePath.

    public void ThemeImagePath(object sender, RoutedEventArgs e)
    {
        var Image = (Image)sender;
        var Theme = Image.DataContext as IPerformTheme;
        Image.Source = ImageHelper.BitmapSourceFromPath(new Uri(Model.ApplicationRoots.ThemeRoot + "/TemplateThemes/" + Theme.Name + "/thumbnail.png")); 
    }
person James Blackburn    schedule 07.01.2016

Привязка изображения с форматированием строки решена следующим образом

 <Image x:Name="im" Width="600" Height="400" HorizontalAlignment="Center"   Source="{Binding ElementName=test, Path=Text}"    />

  <TextBlock x:Name="test" Background="Red" Text="{Binding ThumbnailPath, StringFormat=pack://application:\,\,\,/WpfApplication1;component/Images/\{0\}}" HorizontalAlignment="Left" Margin="20,216,0,0" VerticalAlignment="Top" Height="43"/>
person Joby James    schedule 21.01.2016
comment
Я уже ответил на свой вопрос. В любом случае проверил выше, и это не работает - person James Blackburn; 22.01.2016