114 votes

Comment formater de Temps en xaml

Je suis en train de formater un textblock qui est lié à un laps de Temps bien.Il fonctionne si la propriété est de type DateTime, mais il ne parvient pas si c'est une plage de Temps .Je peux le faire à l'aide d'un convertisseur.Mais je suis en train d'essayer de trouver s'il y a des alternatives.

Exemple De Code

public TimeSpan MyTime { get; set; }

    public Window2()
    {
        InitializeComponent();
        MyTime = DateTime.Now.TimeOfDay;
        DataContext = this;
    }

Xaml

  <TextBlock Text="{Binding MyTime,StringFormat=HH:mm}"/>

J'attends de la textblock pour afficher seulement les heures et mintes.Mais il montre comme

19:10:46.8048860

162voto

Tim Lloyd Points 23571

La chaîne de format est prévu pour fonctionner sur un DateTime, pas un TimeSpan.

Vous pouvez modifier votre code pour travailler avec DateTime.Now à la place. Votre xaml est très bien:

<TextBlock Text="{Binding MyTime,StringFormat=HH:mm}"/>

Mise à jour

Et de .Net 4 format un TimeSpan comme suit:

<TextBlock Text="{Binding MyTime,StringFormat=hh\\:mm}"/>

98voto

Fredrik Hedblad Points 42772

Dans .NET 3.5, vous pouvez utiliser une MultiBinding au lieu

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0}:{1}">
            <Binding Path="MyTime.Hours"/>
            <Binding Path="MyTime.Minutes"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

Mise à jour
Pour répondre aux commentaires. Assurez-vous de la sortie 2 chiffres même si le nombre d'heures ou de minutes, de 0 à 9, vous pouvez utiliser {0:D2} au lieu de {0}. Cela permettra de s'assurer de la sortie pour le temps 12:01 12:01 au lieu de 12:1.
Si vous voulez de sortie 01:01 1:01 utilisation StringFormat="{}{0}:{1:D2}"

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0:D2}:{1:D2}">
            <Binding Path="MyTime.Hours" />
            <Binding Path="MyTime.Minutes" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

52voto

Cygon Points 3790

Juste pour ajouter à la piscine, je suis avec succès à l'aide de cette liaison pour afficher une plage de Temps dans une production d'application WPF:

Binding="{Binding Time, Mode=TwoWay, StringFormat=\{0:h\\:mm\}}"

A eu quelques tentatives pour obtenir les barres obliques inverses à droite :)

21voto

Peter Lillevold Points 20689

StringFormat doit être sous la forme d'une chaîne de format. Dans ce cas, il devrait ressembler à:

<TextBlock Text="{Binding MyTime,StringFormat=`Time values are {0:hh\\:mm}`}"/>

Remarque: si vous souhaitez afficher le nombre total d'heures et de minutes et la plage de temps se trouve être supérieure à 24 heures, il y a un avertissement avec votre approche: Voici une solution de contournement.

12voto

Ira Points 81

WPF .NET 4 a maintenant temps de chaînes http://msdn.microsoft.com/en-us/library/ee372286.aspx

Je suis l'aide de la suite de <TextBlock FontSize="12" Text="{Binding Path=TimeLeft, StringFormat={}{0:g}}" />

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X