mirror of
https://github.com/Nioux/AideDeJeu.git
synced 2025-11-01 16:05:42 +00:00
Utilisation généralisée des FormattedText
This commit is contained in:
parent
f741c229a2
commit
e1eae80d13
3 changed files with 237 additions and 144 deletions
151
AideDeJeu/AideDeJeu/Tools/FormatedTextHelpers.cs
Normal file
151
AideDeJeu/AideDeJeu/Tools/FormatedTextHelpers.cs
Normal file
|
|
@ -0,0 +1,151 @@
|
||||||
|
using HtmlAgilityPack;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
using Xamarin.Forms.Internals;
|
||||||
|
|
||||||
|
namespace AideDeJeu.Tools
|
||||||
|
{
|
||||||
|
public static class FormatedTextHelpers
|
||||||
|
{
|
||||||
|
public static void HtmlToFormatedString(HtmlNode parentNode, FormattedString fs, FontAttributes attributes = FontAttributes.None)
|
||||||
|
{
|
||||||
|
foreach (var node in parentNode.ChildNodes)
|
||||||
|
{
|
||||||
|
if (node.NodeType == HtmlNodeType.Text)
|
||||||
|
{
|
||||||
|
var resname = "content";
|
||||||
|
if (attributes.HasFlag(FontAttributes.Bold))
|
||||||
|
{
|
||||||
|
resname += "bold";
|
||||||
|
}
|
||||||
|
if (attributes.HasFlag(FontAttributes.Italic))
|
||||||
|
{
|
||||||
|
resname += "ital";
|
||||||
|
}
|
||||||
|
var fd = FontData.FromResource(resname);
|
||||||
|
fs.Spans.Add(new Span() { FontFamily = fd.FontFamily, FontAttributes = attributes | fd.FontAttributes, FontSize = fd.FontSize, ForegroundColor = fd.TextColor, Text = node.InnerText });
|
||||||
|
}
|
||||||
|
else if (node.NodeType == HtmlNodeType.Element && node.Name == "br")
|
||||||
|
{
|
||||||
|
fs.Spans.Add(new Span() { Text = "\r\n" });
|
||||||
|
}
|
||||||
|
else if (node.NodeType == HtmlNodeType.Element && node.Name == "strong")
|
||||||
|
{
|
||||||
|
HtmlToFormatedString(node, fs, attributes | FontAttributes.Bold);
|
||||||
|
}
|
||||||
|
else if (node.NodeType == HtmlNodeType.Element && node.Name == "em")
|
||||||
|
{
|
||||||
|
HtmlToFormatedString(node, fs, attributes | FontAttributes.Italic);
|
||||||
|
}
|
||||||
|
else if (node.NodeType == HtmlNodeType.Element)
|
||||||
|
{
|
||||||
|
HtmlToFormatedString(node, fs, attributes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class FontData
|
||||||
|
{
|
||||||
|
public double FontSize { get; set; }
|
||||||
|
public FontAttributes FontAttributes { get; set; }
|
||||||
|
public Color TextColor { get; set; }
|
||||||
|
public string FontFamily { get; set; }
|
||||||
|
|
||||||
|
public static FontData DefaultValues()
|
||||||
|
{
|
||||||
|
return new FontData
|
||||||
|
{
|
||||||
|
FontSize = (double)Label.FontSizeProperty.DefaultValue,
|
||||||
|
FontAttributes = (FontAttributes)Label.FontAttributesProperty.DefaultValue,
|
||||||
|
TextColor = (Color)Label.TextColorProperty.DefaultValue,
|
||||||
|
FontFamily = Label.FontFamilyProperty.DefaultValue.ToString()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static FontData FromResource(string resourceName)
|
||||||
|
{
|
||||||
|
var resource = Application.Current.Resources[resourceName];
|
||||||
|
if (resource == null)
|
||||||
|
{
|
||||||
|
return DefaultValues();
|
||||||
|
}
|
||||||
|
var style = (Style)resource;
|
||||||
|
|
||||||
|
var data = new FontData();
|
||||||
|
var colorSetter = style.Setters.FirstOrDefault(x => x.Property == Label.TextColorProperty);
|
||||||
|
var attrSetter = style.Setters.FirstOrDefault(x => x.Property == Label.FontAttributesProperty);
|
||||||
|
var fontSizeSetter = style.Setters.FirstOrDefault(x => x.Property == Label.FontSizeProperty);
|
||||||
|
var fontFamilySetter = style.Setters.FirstOrDefault(x => x.Property == Label.FontFamilyProperty);
|
||||||
|
var platformFontFamilySetter = ResolveSetterToClass<string>(fontFamilySetter);
|
||||||
|
var platformColorSetter = ResolveSetterToStruct<Color>(colorSetter);
|
||||||
|
|
||||||
|
if (platformColorSetter.HasValue)
|
||||||
|
{
|
||||||
|
data.TextColor = platformColorSetter.Value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
data.TextColor = colorSetter?.Value as Color? ?? (Color)Label.TextColorProperty.DefaultValue;
|
||||||
|
}
|
||||||
|
data.FontSize = fontSizeSetter?.Value as double? ?? (double)Label.FontSizeProperty.DefaultValue;
|
||||||
|
|
||||||
|
|
||||||
|
if (platformFontFamilySetter != null)
|
||||||
|
{
|
||||||
|
data.FontFamily = platformFontFamilySetter;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
data.FontFamily = fontFamilySetter != null && fontFamilySetter.Value != null
|
||||||
|
? fontFamilySetter.Value.ToString()
|
||||||
|
: Label.FontFamilyProperty.DefaultValue?.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
data.FontAttributes = attrSetter?.Value != null
|
||||||
|
? (FontAttributes)Enum.Parse(typeof(FontAttributes), attrSetter.Value.ToString())
|
||||||
|
: (FontAttributes)Label.FontAttributesProperty.DefaultValue;
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
static T ResolveOnPlatformToClass<T>(string key) where T : class
|
||||||
|
{
|
||||||
|
var resource = Application.Current.Resources[key];
|
||||||
|
return resource as OnPlatform<T>;
|
||||||
|
}
|
||||||
|
static T ResolveSetterToClass<T>(Setter setter) where T : class
|
||||||
|
{
|
||||||
|
if (setter?.Value is DynamicResource)
|
||||||
|
{
|
||||||
|
var res = setter.Value as DynamicResource;
|
||||||
|
return ResolveOnPlatformToClass<T>(res.Key);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return setter?.Value as T;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static Nullable<T> ResolveOnPlatformToStruct<T>(string key) where T : struct
|
||||||
|
{
|
||||||
|
var resource = Application.Current.Resources[key];
|
||||||
|
return resource as OnPlatform<Nullable<T>>;
|
||||||
|
}
|
||||||
|
static Nullable<T> ResolveSetterToStruct<T>(Setter setter) where T : struct
|
||||||
|
{
|
||||||
|
if (setter?.Value is DynamicResource)
|
||||||
|
{
|
||||||
|
var res = setter.Value as DynamicResource;
|
||||||
|
return ResolveOnPlatformToStruct<T>(res.Key);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return setter?.Value as T?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -7,6 +7,7 @@ using AideDeJeuLib;
|
||||||
using HtmlAgilityPack;
|
using HtmlAgilityPack;
|
||||||
using Xamarin.Forms;
|
using Xamarin.Forms;
|
||||||
using Xamarin.Forms.Internals;
|
using Xamarin.Forms.Internals;
|
||||||
|
using AideDeJeu.Tools;
|
||||||
|
|
||||||
namespace AideDeJeu.ViewModels
|
namespace AideDeJeu.ViewModels
|
||||||
{
|
{
|
||||||
|
|
@ -16,7 +17,16 @@ namespace AideDeJeu.ViewModels
|
||||||
public Spell Item
|
public Spell Item
|
||||||
{
|
{
|
||||||
get { return _Item; }
|
get { return _Item; }
|
||||||
set { SetProperty(ref _Item, value); OnPropertyChanged(nameof(Description)); }
|
set
|
||||||
|
{
|
||||||
|
SetProperty(ref _Item, value);
|
||||||
|
OnPropertyChanged(nameof(Description));
|
||||||
|
OnPropertyChanged(nameof(TypeLevel));
|
||||||
|
OnPropertyChanged(nameof(CastingTime));
|
||||||
|
OnPropertyChanged(nameof(Range));
|
||||||
|
OnPropertyChanged(nameof(Components));
|
||||||
|
OnPropertyChanged(nameof(Duration));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public FormattedString Description
|
public FormattedString Description
|
||||||
|
|
@ -26,48 +36,75 @@ namespace AideDeJeu.ViewModels
|
||||||
var fs = new FormattedString();
|
var fs = new FormattedString();
|
||||||
if (Item?.DescriptionDiv != null)
|
if (Item?.DescriptionDiv != null)
|
||||||
{
|
{
|
||||||
HtmlToFormatedString(Item?.DescriptionDiv, fs, FontAttributes.None);
|
FormatedTextHelpers.HtmlToFormatedString(Item?.DescriptionDiv, fs, FontAttributes.None);
|
||||||
}
|
}
|
||||||
return fs;
|
return fs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HtmlToFormatedString(HtmlNode parentNode, FormattedString fs, FontAttributes attributes)
|
public FormattedString TypeLevel
|
||||||
{
|
{
|
||||||
foreach (var node in parentNode.ChildNodes)
|
get
|
||||||
{
|
{
|
||||||
if (node.NodeType == HtmlNodeType.Text)
|
var fd = FormatedTextHelpers.FontData.FromResource("contentital");
|
||||||
{
|
var fs = new FormattedString();
|
||||||
var resname = "content";
|
fs.Spans.Add(new Span() { Text = string.Format("{0} de niveau {1}", Item.Type, Item.Level), FontFamily = fd.FontFamily, FontAttributes = fd.FontAttributes, FontSize = fd.FontSize, ForegroundColor = fd.TextColor});
|
||||||
if (attributes.HasFlag(FontAttributes.Bold))
|
return fs;
|
||||||
{
|
|
||||||
resname += "bold";
|
|
||||||
}
|
|
||||||
if (attributes.HasFlag(FontAttributes.Italic))
|
|
||||||
{
|
|
||||||
resname += "ital";
|
|
||||||
}
|
|
||||||
var fd = FontData.FromResource(resname);
|
|
||||||
fs.Spans.Add(new Span() { FontFamily = fd.FontFamily, FontAttributes = attributes | fd.FontAttributes, FontSize = fd.FontSize, ForegroundColor = fd.TextColor, Text = node.InnerText });
|
|
||||||
}
|
|
||||||
else if (node.NodeType == HtmlNodeType.Element && node.Name == "br")
|
|
||||||
{
|
|
||||||
fs.Spans.Add(new Span() { Text = "\r\n" });
|
|
||||||
}
|
|
||||||
else if (node.NodeType == HtmlNodeType.Element && node.Name == "strong")
|
|
||||||
{
|
|
||||||
HtmlToFormatedString(node, fs, attributes | FontAttributes.Bold);
|
|
||||||
}
|
|
||||||
else if (node.NodeType == HtmlNodeType.Element && node.Name == "em")
|
|
||||||
{
|
|
||||||
HtmlToFormatedString(node, fs, attributes | FontAttributes.Italic);
|
|
||||||
}
|
|
||||||
else if (node.NodeType == HtmlNodeType.Element)
|
|
||||||
{
|
|
||||||
HtmlToFormatedString(node, fs, attributes);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public FormattedString CastingTime
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var fd = FormatedTextHelpers.FontData.FromResource("content");
|
||||||
|
var fdb = FormatedTextHelpers.FontData.FromResource("contentbold");
|
||||||
|
var fs = new FormattedString();
|
||||||
|
fs.Spans.Add(new Span() { Text = "Durée d'incantation : ", FontFamily = fdb.FontFamily, FontAttributes = fdb.FontAttributes, FontSize = fdb.FontSize, ForegroundColor = fdb.TextColor });
|
||||||
|
fs.Spans.Add(new Span() { Text = Item.CastingTime, FontFamily = fd.FontFamily, FontAttributes = fd.FontAttributes, FontSize = fd.FontSize, ForegroundColor = fd.TextColor });
|
||||||
|
return fs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public FormattedString Range
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var fd = FormatedTextHelpers.FontData.FromResource("content");
|
||||||
|
var fdb = FormatedTextHelpers.FontData.FromResource("contentbold");
|
||||||
|
var fs = new FormattedString();
|
||||||
|
fs.Spans.Add(new Span() { Text = "Portée : ", FontFamily = fdb.FontFamily, FontAttributes = fdb.FontAttributes, FontSize = fdb.FontSize, ForegroundColor = fdb.TextColor });
|
||||||
|
fs.Spans.Add(new Span() { Text = Item.Range, FontFamily = fd.FontFamily, FontAttributes = fd.FontAttributes, FontSize = fd.FontSize, ForegroundColor = fd.TextColor });
|
||||||
|
return fs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public FormattedString Components
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var fd = FormatedTextHelpers.FontData.FromResource("content");
|
||||||
|
var fdb = FormatedTextHelpers.FontData.FromResource("contentbold");
|
||||||
|
var fs = new FormattedString();
|
||||||
|
fs.Spans.Add(new Span() { Text = "Composantes : ", FontFamily = fdb.FontFamily, FontAttributes = fdb.FontAttributes, FontSize = fdb.FontSize, ForegroundColor = fdb.TextColor });
|
||||||
|
fs.Spans.Add(new Span() { Text = Item.Components, FontFamily = fd.FontFamily, FontAttributes = fd.FontAttributes, FontSize = fd.FontSize, ForegroundColor = fd.TextColor });
|
||||||
|
return fs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public FormattedString Duration
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var fd = FormatedTextHelpers.FontData.FromResource("content");
|
||||||
|
var fdb = FormatedTextHelpers.FontData.FromResource("contentbold");
|
||||||
|
var fs = new FormattedString();
|
||||||
|
fs.Spans.Add(new Span() { Text = "Durée : ", FontFamily = fdb.FontFamily, FontAttributes = fdb.FontAttributes, FontSize = fdb.FontSize, ForegroundColor = fdb.TextColor });
|
||||||
|
fs.Spans.Add(new Span() { Text = Item.Duration, FontFamily = fd.FontFamily, FontAttributes = fd.FontAttributes, FontSize = fd.FontSize, ForegroundColor = fd.TextColor });
|
||||||
|
return fs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public Command LoadItemCommand { get; set; }
|
public Command LoadItemCommand { get; set; }
|
||||||
|
|
||||||
public SpellDetailViewModel(Spell item = null)
|
public SpellDetailViewModel(Spell item = null)
|
||||||
|
|
@ -107,104 +144,4 @@ namespace AideDeJeu.ViewModels
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class FontData
|
|
||||||
{
|
|
||||||
public double FontSize { get; set; }
|
|
||||||
public FontAttributes FontAttributes { get; set; }
|
|
||||||
public Color TextColor { get; set; }
|
|
||||||
public string FontFamily { get; set; }
|
|
||||||
|
|
||||||
public static FontData DefaultValues()
|
|
||||||
{
|
|
||||||
return new FontData
|
|
||||||
{
|
|
||||||
FontSize = (double)Label.FontSizeProperty.DefaultValue,
|
|
||||||
FontAttributes = (FontAttributes)Label.FontAttributesProperty.DefaultValue,
|
|
||||||
TextColor = (Color)Label.TextColorProperty.DefaultValue,
|
|
||||||
FontFamily = Label.FontFamilyProperty.DefaultValue.ToString()
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FontData FromResource(string resourceName)
|
|
||||||
{
|
|
||||||
var resource = Application.Current.Resources[resourceName];
|
|
||||||
if (resource == null)
|
|
||||||
{
|
|
||||||
return DefaultValues();
|
|
||||||
}
|
|
||||||
var style = (Style)resource;
|
|
||||||
|
|
||||||
var data = new FontData();
|
|
||||||
var colorSetter = style.Setters.FirstOrDefault(x => x.Property == Label.TextColorProperty);
|
|
||||||
var attrSetter = style.Setters.FirstOrDefault(x => x.Property == Label.FontAttributesProperty);
|
|
||||||
var fontSizeSetter = style.Setters.FirstOrDefault(x => x.Property == Label.FontSizeProperty);
|
|
||||||
var fontFamilySetter = style.Setters.FirstOrDefault(x => x.Property == Label.FontFamilyProperty);
|
|
||||||
var platformFontFamilySetter = ResolveSetterToClass<string>(fontFamilySetter);
|
|
||||||
var platformColorSetter = ResolveSetterToStruct<Color>(colorSetter);
|
|
||||||
|
|
||||||
if (platformColorSetter.HasValue)
|
|
||||||
{
|
|
||||||
data.TextColor = platformColorSetter.Value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
data.TextColor = colorSetter?.Value as Color? ?? (Color)Label.TextColorProperty.DefaultValue;
|
|
||||||
}
|
|
||||||
data.FontSize = fontSizeSetter?.Value as double? ?? (double)Label.FontSizeProperty.DefaultValue;
|
|
||||||
|
|
||||||
|
|
||||||
if (platformFontFamilySetter != null)
|
|
||||||
{
|
|
||||||
data.FontFamily = platformFontFamilySetter;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
data.FontFamily = fontFamilySetter != null && fontFamilySetter.Value != null
|
|
||||||
? fontFamilySetter.Value.ToString()
|
|
||||||
: Label.FontFamilyProperty.DefaultValue?.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
data.FontAttributes = attrSetter?.Value != null
|
|
||||||
? (FontAttributes)Enum.Parse(typeof(FontAttributes), attrSetter.Value.ToString())
|
|
||||||
: (FontAttributes)Label.FontAttributesProperty.DefaultValue;
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
static T ResolveOnPlatformToClass<T>(string key) where T : class
|
|
||||||
{
|
|
||||||
var resource = Application.Current.Resources[key];
|
|
||||||
return resource as OnPlatform<T>;
|
|
||||||
}
|
|
||||||
static T ResolveSetterToClass<T>(Setter setter) where T : class
|
|
||||||
{
|
|
||||||
if (setter?.Value is DynamicResource)
|
|
||||||
{
|
|
||||||
var res = setter.Value as DynamicResource;
|
|
||||||
return ResolveOnPlatformToClass<T>(res.Key);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return setter?.Value as T;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static Nullable<T> ResolveOnPlatformToStruct<T>(string key) where T : struct
|
|
||||||
{
|
|
||||||
var resource = Application.Current.Resources[key];
|
|
||||||
return resource as OnPlatform<Nullable<T>>;
|
|
||||||
}
|
|
||||||
static Nullable<T> ResolveSetterToStruct<T>(Setter setter) where T : struct
|
|
||||||
{
|
|
||||||
if(setter?.Value is DynamicResource)
|
|
||||||
{
|
|
||||||
var res = setter.Value as DynamicResource;
|
|
||||||
return ResolveOnPlatformToStruct<T>(res.Key);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return setter?.Value as T?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,31 +9,36 @@
|
||||||
|
|
||||||
<Label Text=" " />
|
<Label Text=" " />
|
||||||
|
|
||||||
<StackLayout Orientation="Horizontal">
|
<Label FormattedText="{Binding TypeLevel}" />
|
||||||
|
<!--<StackLayout Orientation="Horizontal">
|
||||||
<Label Text="{Binding Item.Type}" Style="{StaticResource Key=contentital}" />
|
<Label Text="{Binding Item.Type}" Style="{StaticResource Key=contentital}" />
|
||||||
<Label Text="{Binding Item.Level, StringFormat='de niveau {0}'}" Style="{StaticResource Key=contentital}" />
|
<Label Text="{Binding Item.Level, StringFormat='de niveau {0}'}" Style="{StaticResource Key=contentital}" />
|
||||||
</StackLayout>
|
</StackLayout>-->
|
||||||
|
|
||||||
<StackLayout Orientation="Horizontal">
|
<Label FormattedText="{Binding CastingTime}" />
|
||||||
|
<!--<StackLayout Orientation="Horizontal">
|
||||||
<Label Text="Durée d'incantation :" LineBreakMode="NoWrap" Style="{StaticResource Key=contentbold}" />
|
<Label Text="Durée d'incantation :" LineBreakMode="NoWrap" Style="{StaticResource Key=contentbold}" />
|
||||||
<Label Text="{Binding Item.CastingTime}" Style="{StaticResource Key=content}" />
|
<Label Text="{Binding Item.CastingTime}" Style="{StaticResource Key=content}" />
|
||||||
</StackLayout>
|
</StackLayout>-->
|
||||||
|
|
||||||
|
|
||||||
<StackLayout Orientation="Horizontal">
|
<Label FormattedText="{Binding Range}" />
|
||||||
|
<!--<StackLayout Orientation="Horizontal">
|
||||||
<Label Text="Portée :" LineBreakMode="NoWrap" Style="{StaticResource Key=contentbold}" />
|
<Label Text="Portée :" LineBreakMode="NoWrap" Style="{StaticResource Key=contentbold}" />
|
||||||
<Label Text="{Binding Item.Range}" Style="{StaticResource Key=content}" />
|
<Label Text="{Binding Item.Range}" Style="{StaticResource Key=content}" />
|
||||||
</StackLayout>
|
</StackLayout>-->
|
||||||
|
|
||||||
<StackLayout Orientation="Horizontal">
|
<Label FormattedText="{Binding Components}" />
|
||||||
|
<!--<StackLayout Orientation="Horizontal">
|
||||||
<Label Text="Composantes :" LineBreakMode="NoWrap" Style="{StaticResource Key=contentbold}" />
|
<Label Text="Composantes :" LineBreakMode="NoWrap" Style="{StaticResource Key=contentbold}" />
|
||||||
<Label Text="{Binding Item.Components}" Style="{StaticResource Key=content}" />
|
<Label Text="{Binding Item.Components}" Style="{StaticResource Key=content}" />
|
||||||
</StackLayout>
|
</StackLayout>-->
|
||||||
|
|
||||||
<StackLayout Orientation="Horizontal">
|
<Label FormattedText="{Binding Duration}" />
|
||||||
|
<!--<StackLayout Orientation="Horizontal">
|
||||||
<Label Text="Durée :" LineBreakMode="NoWrap" Style="{StaticResource Key=contentbold}" />
|
<Label Text="Durée :" LineBreakMode="NoWrap" Style="{StaticResource Key=contentbold}" />
|
||||||
<Label Text="{Binding Item.Duration}" Style="{StaticResource Key=content}" />
|
<Label Text="{Binding Item.Duration}" Style="{StaticResource Key=content}" />
|
||||||
</StackLayout>
|
</StackLayout>-->
|
||||||
|
|
||||||
<Label Text=" " />
|
<Label Text=" " />
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue