J'ai donc une application qui utilise un système de "modèles".
On peut les voir comme des "thèmes", c'est en fait toute l'interface de la fenêtre...dans un fichier Xaml qui est chargé au démarrage!
Je ne veux pas que mes utilisateurs puissent (facilement) aller voir/modifier ces éléments.
Je choisis donc (comme pour "Word", par exemple, donc les fichiers .docx sont en fait un .rar) de faire passer le fichier Xaml et les sources bitmaps nécessaires dans un fichier .zip (que je renommerai plus tard en quelque chose de moins "évident")
...et tout cela marche PARFAITEMENT !!
Code VB : 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 Imports System.IO Imports Ionic.Zip Class MainWindow ' Je spécifie le chemin vers le fichier .zip et le nom du thème Dim ThemeLink As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\myApplication\Theme\" Dim SelectedTheme As String = "theme1" Private Sub MainWindow_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded ' Décompression du .zip, dans un dossier "Theme" situé au même niveau que l'application Try Using zip As ZipFile = ZipFile.Read(ThemeLink & SelectedTheme & ".zip") zip.ExtractAll(Environment.CurrentDirectory & "\Theme", ExtractExistingFileAction.OverwriteSilently) End Using Catch ex1 As Exception ' End Try ' Remplissage de l'interface grâce à la lecture du fichier xaml fraichement décompressé Dim GridUri As String = Environment.CurrentDirectory & "\Theme\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() End Sub End Class
OR, il y a dans ce dossier les images dont le fichier xaml à besoin, et qui sont référencées ainsi dans le fichier xaml:
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part <Image Source="pack://siteoforigin:,,,/Theme/image1.png"/>
Le fichier xaml quand il est chargé, s'exécute et va chercher les éléments bitmaps dans le dossier qui été décompressé (le même que celui qui contient le xaml)
Tout cela marche NICKEL!
PROBLEME:
Quand l'application va fermer, je voudrais effacer ce dossier "temporaire"!!!
Le fichier xaml s'efface bien volontier (il a été lu en mémoire puis "relaché")...mais il en va tout autrement pour les fichiers images, qui sont toujours considérés comme ouvert par l'application!!
Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Private Sub MainWindow_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Input.KeyEventArgs) Handles Me.KeyDown If e.Key = Key.Escape Then System.IO.Directory.Delete(Environment.CurrentDirectory & "\Theme", True) Me.Close() Return End If End Sub
Auriez-vous une idée de comment je pourrais faire pour "relacher" l'utilisation des éléments bitmaps avant de quitter...de façon à pouvoir effacer ce dossier en toute tranquilité.
Je vous le dit déja, le fait de "vider" la grille contenant tout les éléments, par unne marche pas...enfin si, ca marche, mais tout va trop "vite" et les images ne sont pas "relachées" assez rapidement quand l'instruction Me.Close() arrive)
Code : Sélectionner tout - Visualiser dans une fenêtre à part Me.Content = New Grid
Merci de m'avoir lu jusqu'ici (je me suis en échange appliqué pour être le plus clair possible ;-), merci de l'aide que vous voudrez bien m'accorder...j'en ai vraiment besoin là!! ;-)
Partager