WinRT – l’accès aux fichiers et la sérialisation

L’accès aux fichiers et le mode sécurisé de WinRT fut ma première surprise…Dans tous les exemples sur le NET, seul le LocalStorage est utilisé…et c’est compréhensible car c’est seulement dans les répertoires applicatifs que l’on peut d’accéder aux fichiers par code.

Pour les autres, il faut passer par un FilePicker qui vous fournit le StorageFile désiré – à travers une action utilisateur. Sinon la création d’un StorageFile à partir d’un chemin sous forme de chaine cause une exception…

Ensuite j’ai une la mauvaise surprise de la sérialisation XML…pufffftt ! Plus rien de ce que j’avais en NET ne fonctionne. J’ai donc fait quelques tentatives, pour me rendre compte que le support XML était loin de l’original.

Il n’y par exemple pas moyen de contrôler les attributs que  l’on veut sérialiser ou non. J’ai donc abandonner la piste [Xml…] au détriment de [DataContract] qui lui permet plus de chose.

Suite à cela en creusant encore un peu, j’ai découvert la FutureAccessList dans StorageApplicationPermissions qui permet de retrouver ses jetons et d’accéder à des répertoires ou fichiers sur lesquels l’utilisateur vous a précédemment donner des droits !

Vous trouverez ci-dessous un helper pour la gestion des fichiers avec les méthodes qui vous permette de faire tout cela.

Continue reading “WinRT – l’accès aux fichiers et la sérialisation”

Advertisements

WPF File size converter

In CBR, I had to display the file size of the book in the library…in the explorer, in tooltips, on devices…So i had a file size property (as a long) to get it…but my formatting was wrong because somethimes files are very small and the unit is not Mega…

I wrote a LongtoFileSizeConverter combined to my localize engine like below…

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){

if (value is long && targetType == typeof(string)){

long val = (long)value;

if (val > 1048576) // if more than mega

return val / 1048576 + CultureManager.Instance.GetLocalization(“ByCode”, “MEGA”, “(Mb)”);

else

return val / 1024 + CultureManager.Instance.GetLocalization(“ByCode”, “KILO”, “(Kb)”);

}

return string.Empty;

}

Then just bind it to get the right unit display !

<TextBlock Grid.Column=”2″ Grid.Row=”0″ Text=”{Binding Path=Size, Converter={x:Static Converters:LongToFileSizeConverter.Instance}}”…./>

Full code is available on CBR codeplex project : http://wfpbookreader.codeplex.com/

WPF – Spell checking

I investigates last week to add spellchecking on the localize view of CBR to help us in translation…A quick search on internet tells me that, with net 4, I need the language packs (fr+en+de). Note that it’s not the same with NET3.5.

To download them : http://www.microsoft.com/en-us/download/details.aspx?id=3324

Then I had to bind my text boxes to the current language I already had in my view model as string…

<TextBox Text=”{Binding Path=Translated}” HorizontalAlignment=”Stretch” SpellCheck.IsEnabled=”True” Language=”{Binding DataContext.ActualCode, RelativeSource={RelativeSource AncestorType=ListView}}”

PAF ! Exception !

Binding for property ‘Language’ cannot use the target element’s Language for conversion; if a culture is required, ConverterCulture must be explicitly specified on the Binding.

A second and more longer search brings me to the fact that “Language” property in xaml require a special converter that need also a special “parameter”

The solution is : Add the namespace

xmlns:glob=”clr-namespace:System.Globalization;assembly=mscorlib”

Language=”{Binding DataContext.ActualCode, RelativeSource={RelativeSource AncestorType=ListView}, ConverterCulture={x:Static glob:CultureInfo.InvariantCulture}}”

WaitSpin, ProgressPanel and threads…

Introduction

With my project CBR on CodePlex, I had to work on the new Task Parallel
Library to be compared with old classical threads. This leads me on infinite progress bar control and a non-blocking or intrusive progress UI.

To share my work, you will find below:

  • How to write a WaitSpin control and create several designs in Expression Designer…
  • Create a custom ItemsControl to be a sliding panel with multi-progress cancelable items…
  • Multi-Threading : Threads, Taks and Background worker…

Screenshots

Screenshot: “Demonstration app – Threads and sliding panel”

Screenshot: “Demonstration app – WaitSpin designs”