C# [XAML] Zwei Gridzeilen zu einer machen

Krik

Fleet Admiral Pro
Registriert
Juni 2005
Beiträge
17.003
Moin,

ich programmiere mir gerade für meinen Hausgebrauch eine kleine Mensa-App für WP7.

Für die Datstellung der Einträge verwende ich diesen XAML-Code:
PHP:
<Grid Margin="0,0,0,17" Width="432">
  <Grid.RowDefinitions>
    <RowDefinition/>
    <RowDefinition/>
    <RowDefinition/>
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="60"/>
    <ColumnDefinition/>
    <ColumnDefinition/>
  </Grid.ColumnDefinitions>
  <TextBlock Grid.Column="0" Grid.Row="0" Grid.RowSpan="3" HorizontalAlignment="Center" VerticalAlignment="Top" Text="{Binding Angebot}" Style="{StaticResource PhoneTextAccentStyle}" FontSize="72"/>
  <TextBlock Grid.Column="1" Grid.Row="0" Grid.RowSpan="2" Grid.ColumnSpan="2" VerticalAlignment="Center" Text="{Binding Menu}" TextWrapping="Wrap" Style="{StaticResource PhoneTextNormalStyle}"/>
  <TextBlock Grid.Column="1" Grid.Row="2" Text="{Binding Bemerkung}" Style="{StaticResource PhoneTextSubtleStyle}" FontSize="14"/>
  <TextBlock Grid.Column="2" Grid.Row="2" HorizontalAlignment="Right" Text="{Binding Preis}" Style="{StaticResource PhoneTextSubtleStyle}" FontSize="14"/>
</Grid>

Was dabei heraus kommt, sieht man im Anhang.

Beim ersten Gericht sieht man die zwei leeren Grid-Zellen. Ich möchte aber, dass er an dieser Stelle keine leere Zeile hat.
Hat jemand eine Idee, wie ich das in XAML bewerkstellige?


Gruß, Laurin



PS: Nein, die Gerichte hab ich mir nicht ausgedacht. Es gibt da echt Limettenspaghetti. :freak:
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    237,2 KB · Aufrufe: 255
Zuletzt bearbeitet:
Du könntest die 2.te Row auf Height="Auto" stellen

oder du entfernst die 2.te komplett, stellst die jetzige 3.te auf Height="Auto" und gibst den RowSpan vom Menu weg, reduzierst den RowSpan von der Zahl auf 2 - dann sollts auch hinhaun
 
Zuletzt bearbeitet:
Vielen Dank für die Antwort. :)

Es hat gereicht, die zweite Zeile zu entfernen. Ich weiß nicht mehr, wie die da überhaupt reingekommen ist.


Schaut jetzt schon ziemlich schnuckelig aus. Damit wäre das Design und das einfachste am Programm schon fertig. Jetzt kommt nur noch Onlineabfrage des Speiseplans und die Sache mit der Datenbindung. Letzteres ist für mich eine unbekannte Sache (auch wenn ich sie in XAML schon verwendet habe, ist aber nur abgekupfert).
Ich sollte mir echt mal ein Buch darüber besorgen.
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    232,8 KB · Aufrufe: 163
Na eure Speisen sind aber günstig ^^.

btw, eure Mensa bietet aber keinen Service an, auf den man online zugreifen kann um zu erfahren was angeboten wird? Falls ja, dann bitte unbedingt Link hier posten :D
 
http://www.studentenwerk-potsdam.de/speiseplan.html



Naja, sie bieten eine Webseite an, die ich auslesen lasse. Allerdings hab ich tierisch Encoding-Probleme. Er ersetzt die Zeichen, die er nicht erkennt mit diesem Fragezeichensymbol. Keine Chance, die Zeichen hinterher zu parsen und zu ersetzen. Ich bin gefrustet. :mad:
Hat jemand eine Idee?

Das was oben zu sehen war, waren noch lokale Daten, weil ich das mit dem Online abfragen noch nicht implementiert habe.
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    236,3 KB · Aufrufe: 187
e-Laurin schrieb:
http://www.studentenwerk-potsdam.de/speiseplan.html



Naja, sie bieten eine Webseite an, die ich auslesen lasse. Allerdings hab ich tierisch Encoding-Probleme. Er ersetzt die Zeichen, die er nicht erkennt mit diesem Fragezeichensymbol. Keine Chance, die Zeichen hinterher zu parsen und zu ersetzen. Ich bin gefrustet. :mad:
Hat jemand eine Idee?

Das was oben zu sehen war, waren noch lokale Daten, weil ich das mit dem Online abfragen noch nicht implementiert habe.

Ich bin jetzt kein Experte aber die Codierung findest zu Sourcekopf.
PHP:
<?xml version="1.0" encoding="iso-8859-1"?>

Ich denke mal du versuchst es mit zu UTF-8 zu encodieren. Also Charset auslesen oder einfach fest manuell setzen
 
Ich hab schon UTF-8, Unicode und Big Endian Unicode probiert. Die Encodings habe ich beim WebClient() angegeben, sodass er schon beim Download auf das richtige Encoding achtet.

Keine Chance! Egal, was ich da einstelle, es kommt immer derselbe Murks heraus.
Dabei ist übrigens Unicode eigentlich kompatibel mit ISO 8859-1.

Einzige Möglichkeit, die mir noch einfällt, ist, dass er schon noch korrekt runter lädt (und dort die Zeichen noch nicht ersetzt), aber dann beim Darstellen die Ersetzung vornimmt. Direkt dazwischen hab ich mich noch nicht eingeklinkt.


Danke für eure Posts. :)
Es ist immer gut zu wissen, dass noch Leute da sind, die man im Notfall fragen kann.


Edit: Es ist wirklich das TextBlock Component, das die Ersetzung vornimmt. Ich sehe wieder Licht am Ende des Tunnels. Vielleicht habe ich gestern zu lange daran gesessen, so dass ich das nicht mehr bemerkt habe.
 
Zuletzt bearbeitet:
Kannst du nicht debuggen und einfach im code rauslesen welcher String in den Variablen steht, bevor du ihn bearbeitest?

btw, lädst du die ganze .html Seite runter und parst die oder greifst auf einen konkreten Service zu?
 
Ich lade die Seite runter, da mir kein Service bekannt ist.


Die Encodingfehler treten doch schon beim Download auf. Hab ich mich gestern also doch nicht geirrt.
Hat jemand eine Idee?
Code:
WebClient web = new WebClient();
web.Encoding = Encoding.UTF8;
web.OpenReadAsync(new Uri("http://www.studentenwerk-potsdam.de/speiseplan.html"));
web.OpenReadCompleted += new OpenReadCompletedEventHandler(web_OpenReadCompleted);
Code:
string response;

using (var reader = new StreamReader(e.Result))
{
  response = reader.ReadToEnd();
}
Das ist alles, was zum Runterladen tut.
Es ist egal, was ich bei web.Encoding einstelle. Es kommt immer dasselbe. (Ich glaube, das Property hat keinen Einfluss auf das Encoding des Downloads.)
 
Also bei mir funktioniert es folgendermassen
Code:
WebClient web = new WebClient();
web.Encoding = Encoding.Default;
web.OpenReadAsync(new Uri("http://www.studentenwerk-potsdam.de/speiseplan.html"));
web.OpenReadCompleted += new OpenReadCompletedEventHandler(web_OpenReadCompleted);

using (var reader = new StreamReader(e.Result, System.Text.Encoding.Default))
 
Encoding.Default gibt es beim .Net Compact Framework 3.5 für WP7 nicht. Es gibt überhaupt nur sehr wenige Encodings zur Auswahl.
 
Zuletzt bearbeitet: (Typo)
Verwende doch einfach mal die .Net Methode GetEncoding um festzustellen, welches exakt verwendet wird.
 
Die hat mir immer UTF-8 zurückgegeben.

Ich habe die Lösung jetzt gefunden.
Im Ereignishandler, wo der Downloadstream in eine String-Variable kopiert wird, muss ich das Encoding manuell auf ISO 8859-1 (= Westeuropäisch) stellen.

Schau dann so aus:
Code:
// [...]

    WebClient web = new WebClient();           
    web.OpenReadCompleted += new OpenReadCompletedEventHandler(web_OpenReadCompleted);
    web.OpenReadAsync(new Uri("http://www.studentenwerk-potsdam.de/speiseplan.html"));            
}

void web_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    string response;

    using (var reader = new StreamReader(e.Result, Encoding.GetEncoding("iso-8859-1")))
    {
        response = reader.ReadToEnd();
    }

So, jetzt noch die <sup>-Tags filtern und dann muss ich mir nur noch anschauen, wie man unter WP7 Daten im Isolated Storage speichert.
 
Zuletzt bearbeitet:
Zurück
Oben