Bonjour,
Mon application WPF (WpfApplication1) est, pour sa partie XAML, composé d'une simple grille vide.
Les éléments y sont chargés, depuis un fichier XAML, grâce à un XamlReader.
Ce fichier Xaml contient (pour l'exemple) une image située dans le dossier "Mes documents" de l'utilisateur...et DOIT être lus à cet emplacement.
Le soucis, c'est que lors de l'importation de ce fichier XAML l'url des images est relative à l'application qui charge le XAML
...en clair, ce devrait être une image dont l'URL serait relatif a l'application (pack://siteoforigin:, pack://application)
Or, ici le chemin 'sort' de ce contexte et va se contruire ainsi:
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "Theme\"
J'écris donc un Converter, en espérant récupérer le nom du fichier et reconstruire le path complet...mais sans succès!!
> 'Impossible de créer le type inconnu '{clr-namespace:WpfApplication1}imgurlConvert'.'
La partie XAML de l'application:
La partie VB de l'application:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:local="clr-namespace:test" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" x:Class="MainWindow" Title="main" Height="600" Width="800"> <Grid></Grid> </Window>
Le fichier XAML à charger:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 Imports System.IO Class MainWindow Public Shared ThemeTempFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\Theme\" Public Shared themeGrid As Grid Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded Debug.Print(ThemeTempFolder) loadInterface() End Sub Sub loadInterface() ' Load extracted (grid) xaml file as content of the window Dim GridUri As String = ThemeTempFolder & "theme.xaml" Dim fs As FileStream = New FileStream(GridUri, FileMode.Open, FileAccess.Read) Dim sri = TryCast(System.Windows.Markup.XamlReader.Load(fs), Grid) Me.Content = sri fs.Close() ' Liens, dans le code, aux éléments de l'interface chargée en Xaml. themeGrid = LogicalTreeHelper.FindLogicalNode(sri, "themeGrid") End Sub End Class Public Class imgurlConvert Implements IValueConverter Public Function Convert(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert Dim valConv As String = MainWindow.ThemeTempFolder & value If File.Exists(valConv) Then Return valConv End If Return Nothing End Function Public Function ConvertBack(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack Return value End Function End Class
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:local="clr-namespace:WpfApplication1" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System="clr-namespace:System;assembly=mscorlib" Name="themeGrid"> <Grid.Resources> <local:imgurlConvert x:Key="urlConvert" /> </Grid.Resources> <Grid Name="mainGrid"> <Image Source={Binding Path="image.png", Converter={StaticResource urlConvert}} CacheOption="OnLoad" x:Name="Image1"/> </Grid> </Grid>
J'espère que j'ai été assez clair..et vous remercie pour l'aide que vous voudrez bien m'apporter!!
Partager