• 21.05.2025, 02:02
  • Register
  • Login
  • You are not logged in.

 

Dear visitor, welcome to Aqua Computer Forum. If this is your first visit here, please read the Help. It explains how this page works. You must be registered before you can use all the page's features. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

XAML für Übersichtsseiten

Thursday, August 1st 2024, 10:10am

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!

Thursday, August 1st 2024, 10:30am

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:

Source code

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}"

Thursday, August 1st 2024, 11:28am

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!

Thursday, August 1st 2024, 8:35pm

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.

Source code

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.

This post has been edited 4 times, last edit by "-Vulture-" (Aug 1st 2024, 8:58pm)

Friday, August 2nd 2024, 7:23am

Das was ich gepostet habe funktioniert so mit dem Binding:

Source code

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:

Source code

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.

Source code

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


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

Saturday, August 3rd 2024, 1:09pm

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