String.Format tut nicht... Sieht jemand warum?

  • WPF

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    String.Format tut nicht... Sieht jemand warum?

    Hallo Leute und danke fürs reinschauen...

    Meine Frage ist kurz:

    XML-Quellcode

    1. <Label Padding="0" Content="{Binding ID, StringFormat=\{0:000000\}}" VerticalContentAlignment="Center" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" Background="Transparent" Margin="2"/>


    StringFormat tut irgend wie nicht... Ich wollte eigentlich nicht 1 sondern 000001 anzeigen... Kann mir jemand sagen warum es nicht tut?

    Danke...
    Eigenartig. Hab nun auch einige Möglichkeiten versucht aber es steht immer nur die eine Ziffer da...

    Umgehen könntest du das mit einem Converter:

    C#-Quellcode

    1. public class IntToStringConverter : IValueConverter
    2. {
    3. public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    4. {
    5. int i = (int)value;
    6. return i.ToString("000000");
    7. }
    8. public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    9. {
    10. return Binding.DoNothing;
    11. }
    12. }

    XML-Quellcode

    1. <Window x:Class="WpfApplication1.MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:local="clr-namespace:WpfApplication1"
    5. Title="MainWindow" Height="350" Width="525">
    6. <Window.DataContext>
    7. <local:MainWindowViewModel x:Name="vm" />
    8. </Window.DataContext>
    9. <Window.Resources>
    10. <local:IntToStringConverter x:Key="IntToStringConverter" />
    11. </Window.Resources>
    12. <StackPanel>
    13. <Label Content="{Binding Id, Converter={StaticResource IntToStringConverter}}" />
    14. </StackPanel>
    15. </Window>


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Uiuiui, ich merke gerade, dass ja oben ein Label verwendet wird (wieso sollte man da Label benutzen?), da geht das natürlich nicht, weil Label.Content kein String ist. ContentStringFormat geht aber bei mir, also sehe ich gerade die zwei Möglichkeiten (wenn's unbedingt ein Label sein muss):

    XML-Quellcode

    1. <Label Content="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=Number}" ContentStringFormat="000000" />
    2. <Label>
    3. <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=Number, StringFormat={}{0:000000}}" />
    4. </Label>
    Bilder
    • Result.png

      5,46 kB, 449×271, 123 mal angesehen
    Mfg
    Vincent

    Du kannst ja einfach zusätzliche anlegen.

    XML-Quellcode

    1. <Window x:Class="WpfApplication1.MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:local="clr-namespace:WpfApplication1"
    5. xmlns:converter="clr-namespace:DeinNamespace.Namespace"
    6. Title="MainWindow" Height="350" Width="525">
    7. </Window>


    Falls dieser in einer anderen Assembly liegt musst du diese auch mit angeben.

    XML-Quellcode

    1. <Window x:Class="WpfApplication1.MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:local="clr-namespace:WpfApplication1"
    5. xmlns:converter="clr-namespace:DeinNamespace.Namespace"
    6. xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary"
    7. Title="MainWindow" Height="350" Width="525">
    8. </Window>


    Siehe auch:
    msdn.microsoft.com/de-de/library/ms747086(v=vs.110).aspx
    codeproject.com/Articles/11191…ith-Custom-Namespaces-and

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    C#-Quellcode

    1. using System;
    2. using System.Windows.Data;
    3. namespace CS_AS_2016.CS_Classes
    4. {
    5. public class LongToStringConverter : IValueConverter
    6. {
    7. public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    8. {
    9. try
    10. {
    11. return ((long)value).ToString("000000");
    12. }
    13. catch (Exception)
    14. {
    15. return (0).ToString("000000");
    16. }
    17. }
    18. public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    19. {
    20. return Binding.DoNothing;
    21. }
    22. }
    23. }


    XML-Quellcode

    1. <UserControl x:Class="CS_AS_2016.CS_Controls.CS_AktenViewNew"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    5. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    6. xmlns:local="clr-namespace:CS_AS_2016.CS_Controls"
    7. xmlns:Controls="clr-namespace:CS_Base.Controls;assembly=CS_Base"
    8. xmlns:converter="clr-namespace:CS_AS_2016.CS_Classes"
    9. mc:Ignorable="d"
    10. d:DesignHeight="800" d:DesignWidth="1000">
    11. <UserControl.Resources>
    12. <converter:LongToStringConverter x:Key="LongToStringConverter" />
    13. </UserControl.Resources>
    14. <Grid>
    15. <Grid.ColumnDefinitions>
    16. <ColumnDefinition MinWidth="300" />
    17. <ColumnDefinition />
    18. ...


    Schon hier beginnt der zu meckern...


    ErfinderDesRades: Es handelt sich um eine Tabelle... Ich zeige die Werte direkt an. Dort ist eine Aufzählung 1, 2, 3 was als ID als Long anzeigen sollte... Das nervige ist, dass wenn der eine Stelle dazu bekommt, sieht es scheiße aus. Aus dem Grund will ich alles gleich darstellen...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EugenIS“ ()

    EugenIS schrieb:

    ErfinderDesRades: Es handelt sich um eine Tabelle... Ich zeige die Werte direkt an. Dort ist eine Aufzählung 1, 2, 3 was als ID als Long anzeigen sollte.
    Wie gesagt: Ich vermute, dass ein anderer Datentyp vorliegt als du denkst.
    Naheliegend wäre etwa Long? statt Long - muss ich grad mal ausprobieren, was String.Format() mit einem Long? macht.

    edit: nach tests siehts mir nu eher danach aus, dass bei dir ein String vorliegt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    EugenIS schrieb:

    Irgend wie meckert er, dass in meinem Namespace der Converter nicht vorhanden ist...
    Also ich habe deinen geposteten Code in ein neues Projekt eingefügt...
    Da kam bei mir ebenso solch Fehlermeldung, obwohl die IntelliSense den Konverter angeboten hat.

    Nach Projekt neu erstellen war der Fehler dann weg.

    Ich hatte es sogar schon hart neckiger - da konnte ich nach dem neu Erstellen des Projektes den Fehler zwar noch sehen, aber das Projekt lies sich anstandslos starten?
    Wenn's gar nicht geholfen hat, dann habe ich das VS neu gestartet...
    Fehler im XAML sind häufig nichtssagend und das Programm lässt sich trotzdem starten. Bei mir sind immer 4-5 Fehler unten in der Fehlerliste, Visual Studio weiß nunmal auch nicht alles, der Entwickler weiß meistens mehr und wenn der Entwickler sagt, dass es diese Klasse gibt, dann "warnt" VS zwar, aber starten könnt ihr's trotzdem - wenn ihr falsch liegt, schmiert das Programm sowieso einfach ab oder es passiert einfach nichts bzw. es steht dann unten im Output Window.
    Mfg
    Vincent

    das dumme an diese Xaml-Editor-Vorschau-Fehler ist nur, dass dann die Vorschau im Eimer ist, und Intellisense, und das Property-Fenster.
    Also im Grunde ist man dann bald wieder auf einem Stand angekommen, wo man auch in Notepad programmieren könnte.

    Bekam heut einen Hinweis, warum das wohl so sein mag: Nämlich wenn der Xaml-Editor auf Klassen zugreifen muss aus derselben Assembly, wie das Xaml was er grad vorzuzeigen versucht, das sei wohl problematisch.