J'ai un problème où mon MarkupExtension se comporte différemment au moment du design, ou plutôt l'analyseur xaml fournit des valeurs différentes.L'analyse de WPF au moment du design est différente
ma classe:
class FormattableConverter : MarkupExtension, IValueConverter
{
public FormattableConverter(string format)
{
Format = format;
}
public string Format { get; set; }
public override void ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var formattable = value as IFormattable;
return formattable?.ToString(Format, culture);
}
/* ConvertBack returns NotImplementedException */
}
Je l'utilise pour montrer une valeur DateTime
.:
<HeaderedContentControl Content="{Binding DateTimeValue, Converter={c:FormattableConverter 'hh\\:mm\\:ss'}}"
/* Other parameters */ />
Lorsque la rupture lors de l'exécution, IntelliSense montre le format est hh: mm \\ \ \: ss, et la mise en forme fonctionne.
Mais dans le concepteur d'un FormatException est jeté: Input string was not in a correct format.
Si je déboguer le concepteur (Fixation à XDesProc.exe) IntelliSence me montrer que le format est hh: mm: ss; Les antislashs sont partis.
J'ai essayé:
'hh\\:mm\\:ss'
'hh\\:mm\\:ss'
{}hh\\:mm\\:ss
Format='hh\\\\:mm\\\\:ss'
(cela fonctionne dans le concepteur, mais pas pendant la durée)Format=hh\\\\:mm\\\\:ss
(ceci fonctionne dans le concepteur, mais pas exécution)Format=hh\\:mm\\:ss
- autres combinaisons ci-dessus
Toute idée pourquoi l'analyseur fournit différentes valeurs de chaîne?
J'ai juste essayé de changer mon convertisseur pour utiliser le ConverterParameter au lieu d'une propriété, et de faire ceci: 'ConverterParameter =" hh \: mm \: ss "'. Cela marche! En déplaçant également la chaîne de format vers une ressource fonctionne également. Apparemment, l'analyseur n'aime pas analyser les propriétés personnalisées. – Anders
@Nautious Je suis content que cela a fonctionné. – Vishal