• 01.08.2025, 03:41
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

-Vulture-

Full Member

XAML für Übersichtsseiten

Donnerstag, 1. August 2024, 10:10

Hi zusammen,

habe mir vor geraumer Zeit mal eine Übersichtsseite zusammengebaut, die in meinem Gehäuse per kleinem Monitor dargestellt wird.
Diese wollte ich jetzt mal wieder etwas anpassen und scheitere gerade an einer eigentlich recht einfachen Sache: Ich möchte von einem Sensor, dargestellt per Textblock und Multibind (Wert und Einheit) das Anzeigeformat ändern.
Poste den Beispielcode später, mir geht es erstmal um generelle Fragen:

  1. Die Sprache ist ja XAML...sind alle Elemente dieser Sprache unterstützt? Kann man sich auf die Dokus im Internet also beziehen oder gibt es hier etwas von Aquacomputer selbst?
  2. Ich habe die oben gewünschte Änderung des Anzeigeformates der Downloadgeschwindigkeit meiner Netzwerkkarte versucht mit StringFormat ='{}{0:N2} auf den Sensorwert anzuwenden...allerdings färbt sich der Code StringFormat noch nicht mal rot ein, wenn ich ihn im Editor tippe.
    Womit wir wieder bei Erstens wären...er scheint den Code nicht zu kennen.

Danke erstmal!

sebastian

Administrator

Donnerstag, 1. August 2024, 10:30

Der Editor und das was gerendert wird sind 2 verschiede sachen.
Bis auf Eingabeelemente (Buttons, slider...) werden alle elemente unterstützt.

Idealerweise macht man komplexere sachen in einem anderen Editor (VScode, ..).

das binding mit string format sieht dann so aus:

Quellcode

1
2
Text="{Binding ElementName=this, Path=DataContext.Value, StringFormat={}{0:#0.00}, FallbackValue=no data available}"
Text="{Binding ElementName=this, Path=DataContext.Value, StringFormat={}{0:N2}, FallbackValue=no data available}"

-Vulture-

Full Member

Donnerstag, 1. August 2024, 11:28

Hm interessant, so in der Art habe ich das gestern auch schon versucht, allerdings leuchtet das Element in der AS dann rot auf, sprich der Code läuft nicht.
Na ich werde das Beispiel dann später mal posten, dann können wir da rein schauen. Wie gesagt, der Editor kam mit dem StringFormat als Befehl an sich schon nicht klar, aber wahrscheinlich sitzt der Fehler vor dem Bildschirm ;)...

Danke erstmal!

-Vulture-

Full Member

Donnerstag, 1. August 2024, 20:35

Ok, hier jetzt mein Beispiel. Was mich immernoch verwirrt ist die Syntax. In deinem Beispiel benutzt du { und , währenddessen es in meinem Code < und Leerzeichen sind...
Der Code lässt sich ausführen, wenn man den Text nach dem = in " " setzt.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<UserControl
	x:Name="this"
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
	xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
	xmlns:sys="clr-namespace:System;assembly=mscorlib"
	mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300">
	<Grid Background="Black">
    	<Grid.RowDefinitions>
        	<RowDefinition Height="Auto"/>
        	<RowDefinition Height="*"/>
    	</Grid.RowDefinitions>
    	<TextBlock
        	Margin="5,2,0,0"
        	Text="Upload"
        	FontSize="12" HorizontalAlignment="Left"/>

    	<TextBlock
        	Margin="0,2,5,0"
        	HorizontalAlignment="Right" VerticalAlignment="Center"
        	FontSize="12">
        	<TextBlock.Text>
            	<MultiBinding Converter="{StaticResource UnitConverter}" ConverterParameter="0">
                	<Binding ElementName="this" Path="DataContext.Data"/>
                	<Binding ElementName="this" Path="DataContext.Data.v" StringFormat="{}{0:#0.00}"/>
            	</MultiBinding>
        	</TextBlock.Text>
    	</TextBlock>
	</Grid>
</UserControl>


Die Anzeige funktioniert damit leider aber immernoch nicht korrekt, er zeigt immernoch eine 0 an...ich hätte gerne 0.00 MB/s.
Ich könnte das auch mit einem virtuellen SW-Sensor lösen, aber das fühlt sich für eine Formatierung Overkill an.

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »-Vulture-« (1. August 2024, 20:58)

sebastian

Administrator

Freitag, 2. August 2024, 07:23

Das was ich gepostet habe funktioniert so mit dem Binding:

Quellcode

1
2
<TextBlock Text="{Binding ElementName=this, Path=DataContext.Value, StringFormat={}{0:N2}, FallbackValue=no data available}"/>
<TextBlock Text="{Binding ElementName=this, Path=DataContext.Value, StringFormat={}{0:N2} MB/s, FallbackValue=no data available}" />


du hast aber einen Converter dazwischen, also das da:

Quellcode

1
<MultiBinding Converter="{StaticResource UnitConverter}" ConverterParameter="0">


da funktioniert das grundsätzlich etwas anders. so ein konverter ist ein stück software das zwischen das daten und ausgabe ist und die formatierung übernimmt.
dieser {StaticResource UnitConverter} ist unsere variante um aus werten mit einheiten formatierte texte zu erzeugen.
die ConverterParameter = 0 gibt an das du keine kommastellen haben willst.
wenn du da 2 hinschreibst hast du immer 2 nachkommastellen.

Quellcode

1
<MultiBinding Converter="{StaticResource UnitConverter}" ConverterParameter="2">


das:
StringFormat="{}{0:#0.00} hat in dem Multibinding nichts zu suchen.

-Vulture-

Full Member

Samstag, 3. August 2024, 13:09

Hat funktioniert, ich bastel dann mal weiter und melde mich, wenn was nicht klappt. Danke!