Laden...

Forenbeiträge von SaFl Ingesamt 16 Beiträge

25.09.2016 - 10:07 Uhr

Hast Du mal nach Style Binding gesucht?

Jab, habe ich bereits gemacht. Allerdings, auch in deinem Link, ist es nicht das was ich brauche. Denke ich.

Ich suche ein Weg, wie ich eine Eigenschaft, hier Color, in einem definierten Style mitgeben kann. Deswegen auch meine zweite Frage. Muss ich dafür jetzt zwei komplett identische Styles erstellen, wo nur die Hintergrundfarbe anders ist?

Oder reden wir hier nur aneinander vorbei? Dann tut es mir leid 😃

24.09.2016 - 14:09 Uhr

Dankeschön für die schnelle Antwort.

Ich habe mich jetzt ein bisschen eingelesen. Bin auch schon ein Stück weiter vom Verständnis. Aber eins will noch nicht in meinen Kopf.


<Border.Background>
    <SolidColorBrush x:Name="b" Color="{StaticResource BackgroundColor}" />
</Border.Background>

Ich habe dem Border jetzt die Res. zugewiesen.
Kann ich jetzt aber in meinem Hauptfenster das Control erstellen und sozusagen die Information mitgeben, dass er statt BackgroundColor die ForegroundColor nehmen soll?
Oder muss ich dafür einen neuen Style kreieren, mit einer anderen Farbe?

Ich habe mal nach Triggern geschaut, aber das sieht mir danach aus, dass die Abhängigkeit nur bei Laufzeit funktioniert. Oder kann ich eine eigene Eigenschaft festlegen, nach dem Motto:

Im Hauptfenster


<Button Farbe="nimmGruen" ... />
oder
<Button Farbe="nimmBlau" ... />

Und im Dictionary


<Color x:Key="Gruen" ... />
<Color x:Key="Blau" ... />

<Border.Background>
    <SolidColorBrush x:Name="b" Color="Gucke welche Eigenschaft mitgegeben wurde" />
</Border.Background>

Oder stehe ich nur auf dem Schlauch?

24.09.2016 - 12:48 Uhr

Moin Moin liebe Gemeinde,

ich spiele zur Zeit ein bisschen mit WPF rum und habe nun probiert einen Button in einem ResourceDictionary zu erstellen.
Das klappt auch alles wie es soll. In meinem Hauptfenster wird der Button auch richtig übernommen und die Animationen ausgeführt. Soweit so gut.

Ich habe im Dictionary zwei Farben festgelegt.


<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:WPFTheme">

    <Color x:Key="BackgroundColor" A="255"  R="27" G="163" B="156" />

    <Color x:Key="MouseOverBackgroundColor" A="255" R="101" G="198" B="187" />

    <Style TargetType="Button">

Wie kann ich jetzt in meinem Hauptfenster, also in XAML, die Farbe im Dictionary überschreiben. z.B. um für bestimmte Buttons eine andere Farbe vorzugeben?

Ich habe schon im Netz und hier imForum gesucht, allerdings glaube ich, dass ich das Problem nicht richtig betiteln kann. Habt ihr eine Idee wie ich hierbei vorgehen kann?

Vielen Dank
Thomas

14.03.2016 - 15:35 Uhr

Nein, die werden von mir vorgegeben.

Also so soll der Header zum Beispiel aussehen:

Datum (Button) | Beleg (Button) | usw...

nur dass die Buttons je nach gewähltem Theme ein anderes Bild bekommen sollen (eine andere Farbe).

13.03.2016 - 22:00 Uhr

Danke ErfinderDesRades,

ja, die Header zum Beispiel (TextBlock) werden ordentlich angezeigt. Wenn ich die Source direkt auf das entsprechende Image verweise, funktioniert es auch. Da ich in meinem Programm allerdings eine Theme-Auswahl habe, muss ich das dynamisch lösen. Und dies ist bisher der einzige Weg, den ich gefunden habe.

12.03.2016 - 11:59 Uhr

Moin liebe Gemeinde,

ich verzweifle gerade bei dem Versuch, die Source eines Image in einem Button festzulegen.

Ich habe folgenden Button (vereinfacht):


<DataGrid>
  <DataGrid.Columns>
    <DataGridTemplateColumn>
      <DataGridTemplateColumn.HeaderTemplate>
        <DataTemplate>
          <StackPanel>
            <TextBlock />
            <Button>
              <StackPanel>
                <Image Source="{Binding imgSrcSearch}" />
              </StackPanel>
            </Button>
           ...

Ich habe im weiteren Code allerdings nochmal einen Button, mit einem StackPanel (Ohne DataTemplate) und darin befindet sich auch ein Image mit einem Binding. Dort funktioniert das ganze ohne Probleme.

Edit: Ich habe das ganze bis zum DataTemplate ausprobiert. Also wenn ich das StackPanel raus nehme und ohne das Grid einfüge, geht das auch. Liegt das ganze am DataTemplate?

Weiß jemand Rat?

Danke, Thomas

14.02.2016 - 19:29 Uhr

Moin,

ich habe ein DataGrid und binde ihn an eine List<T>. Nun möchte ich allerdings die Daten im Grid, z.B. in der Spalte Preis rechtsbündig und vertical zentriert formatieren.
Ich habe bereits nach einer Lösung gesucht und auch eine gefunden.

Schema:

<DataGrid>
  <DataGrid.Colums>
    <DataGridTemplateColumn>
      <DataGridTemplateColumn.HeaderTemplate>
        <DataTemplate>
          <StackPanel>
            <TextBlock>
          </StackPanel>
        </DataTemplate>
      </DataGridTemplateColumn.HeaderTemplate>
      <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
          <StackPanel>
            <TextBlock Text={Binding Price}>
          </StackPanel>
        </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
  </DataGrid.Columns>
<DatGrid>

Nun muss ich dies aber für alle Spalten erstellen, wenn ich z.B. alle Spalten rechtsbündig angeordnet haben will. Das ist soweit richtig, oder?

Nun möchte ich das ganze als Resource haben, das bekomme ich auch soweit hin, aber wie kann ich in der Resource das Binding auf den TextBlock festelgen, bzw. dann in jeder Spalte wo ich auf diese Resource verweise, das Binding anpassen?

Oder ganz anders gefragt: Gibt es eine einfache Möglichkeit, die Ausrichtung und das Padding anzupassen?

Danke

12.02.2016 - 20:08 Uhr

Okay, vielen Dank!

12.02.2016 - 19:08 Uhr

Okay, danke für den Tipp. Ich habe jetzt einen Konstruktor in der Klasse der Objekte ohne Parameter erstellt. Wenn ich nun ein Objekt ohne Parameter hinzufüge, habe ich auch einen leeren Eintrag, den ich auch auswählen kann.

Aber ist das eine saubere Lösung?

12.02.2016 - 17:45 Uhr

Moin Moin,

ich binde eine ComboBox an eine ObservableCollection<> mit DisplayMemberPath. Soweit so gut.

Gibt es nun eine Möglichkeit, wie ich der ComboBox eine leere Auswahl hinzufügen kann, so dass der User auswählen kann, ob er ein Objekt aus der Liste auswählen will oder die ComboBox leer lassen möchte?

Beim Öffnen des Formulars ist es kein Problem, da liegt der Index bei -1 und es ist ein "leerer" Eintrag gewählt. Wähle ich aber nun einen Index aus, kann ich danach nicht mehr zum Ausgangszustand zurück.

Ich hoffe ihr versteht was ich meine.

Vielen Dank

09.02.2016 - 22:10 Uhr

Danke FZelle,

werde ich mir auch mal anschauen.

09.02.2016 - 20:30 Uhr

Danke für deine zügige Antwort Abt,

dann scheint das wohl der bessere Weg zu sein. Ich habe nur gehofft diesen Aufwand vermeiden zu können. Nun ja, da ich das ja jetzt so gelöst habe, ist das ja kein Problem mehr.

Danke für den Tipp mit den Repository Pattern, da werde ich mich mal einlesen. Klingt interessant.

Und zum Thema Parameter: dieses Vorgehensweise ist mir bekannt und bewusst, ich nutze es auch im WebBereich, allerdings ist die Anwendung die ich erstelle erstmal nur für mich und zum rumspielen. Mir liegt es im Moment erst einmal daran, eine Abfrage in der einfachen Form zum laufen zu bringen, bevor ich sie erweitere.

Aber danke für die Mühe

09.02.2016 - 20:06 Uhr

verwendetes Datenbanksystem: SQLite

Moin Moin liebe Gemeinde.

Bisher habe ich für die Daten in meiner Anwendung auf mySQL zurückgegriffen, weil es einfach da war und ich bezüglich von Webseiten damit viel arbeite. Nun stelle ich gerade alles auf SQLite um.

In mySQL habe ich die Möglichkeit, mit IF zu arbeiten. In SQLite gibt es das so nicht, laut Dokumentation ist die Alternative CASE.

Konkret in meinem Fall:
Ich möchte Anhand von Suchkriterien eine Abfrage durchführen. Ich kann also entweder nach der Artikelnummer oder nach dem Namen, bzw. auch nur nach einem Teil suchen.
Mein Query dazu:


sqlCommand.CommandText = "SELECT a.ean, a.name, a.package, a.categoryId, b.category " +
                                         "FROM article AS a " +
                                         "JOIN article_category AS b " +
                                         "ON a.categoryId = b.id " +
                                         "WHERE ean LIKE '%" + GM.checkEan(ean) + "%' " +
                                         "AND name LIKE '%" + name + "%' ";

Wenn ich nun aber das Feld ean leer lasse, selektiert diese Abfrage im Prinzip alles. Das ist so nicht gewollt. In mySQL kann ich das LIKE mit IF ean > 0 einschließen, bzw. ausschließen.
Ich verstehe allerdings nicht, wie ich das ganze mit CASE umsetzen soll, bzw. ob es für diesen Fall so einfach umzusetzen ist.
Damit ich erst einmal weiter arbeiten kann, frage ich vor dem Erstellen des Querys erst die Felder ab und führe dann dementsprechend 3 verschiedene Querys aus. Und das ist meiner Meinung nach keine dauerhafte Lösung.

Hat jemand von euch eine Idee wie ich der Problematik Herr werden kann?

Vielen Dank schonmal.

05.07.2015 - 22:04 Uhr

Dann danke erstmal an dieser Stelle. Ich werde mir das mit den Properties nochmal in Ruhe anschauen. Dann erstmal einen schönen Abend

05.07.2015 - 21:32 Uhr

Okay, also wenn es um List geht.... also ich habe folgendes:


class Mediathek {
        XmlDocument xdoc = new XmlDocument();
        public List<Song> mediathekAuslesen(){
            List<Song> songs = new List<Song>();
            xdoc.Load("media.xml");
            foreach (XmlNode mp3 in xdoc.SelectNodes("songs/ *")) {
                Song song = new Song(mp3["title"].InnerText, mp3["artist"].InnerText, mp3["album"].InnerText, mp3["duration"].InnerText, mp3["genre"].InnerText, mp3["path"].InnerText, mp3["year"].InnerText);
                songs.Add(song);
            }
            return songs;
        }
    }

class Song {
        string title, artist, album, duration, genre, path;
        string year;

        public Song(string title, string artist, string album, string duration, string genre, string path, string year) {
            this.title = title;
            this.artist = artist;
            this.album = album;
            this.duration = duration;
            this.genre = genre;
            this.path = path;
            this.year = year;
        }
    }

Ich möchte nun einfach in der Klasse Form1


      Mediathek mediathek = new Mediathek();
      List<Song> mediaReturn = mediathek.mediathekAuslesen();

Die Liste empfangen und in der ListView anzeigen.

Wenn ich dann direkt darauf zugreife mit index [0] gibt er tMusic.Song aus. Aber wie kann ich nun auf die einzelnen Felder zugreifen?

Edit: Habe gerade festgestellt, dass die Felder private sind, dann kann ich ja auch nicht darauf zugreifen. Wäre es in diesem Fall ratsam, diese public zu machen?

@Abt, das ist mir schon bewusst, für mich war die Frage auch eher nach einem Lösungsansatz, den ihr vorschlagen würdet, auf Grund eurer Erfahrung... 🙂

05.07.2015 - 21:08 Uhr

Erstmal eine freundliches Hallo in die Runde. Dies ist mein erster Beitrag und ich hoffe Ihr könnt mir die nötigen Anregungen geben.

Ich bin recht neu in C# und begreife so langsam die Zusammenhänge der OOP. Programmiererfahrung habe ich allerdings schon aus dem Webbereich (php,javascript usw.). Demnach fällt es mir eigentlich recht leicht, eine Lösung zu finden. Allerdings in diesem Fall, bin ich wahrscheinlich auf dem Holzweg.

Nehmen wir an, ich habe ein Formular. Auf diesem befindet sich eine ListView. Nun möchte ich, dass wenn die Form sich öffnet, dass eine Methode einer Klasse aufgerufen wird.
Diese Methode liest eine XML Datei aus (Es können mehrere Hundert Zeilen sein). Das Ergebnis dieser "Auslesung" soll nun zurückgegeben werden.

Mein Problem: Ich weiß nicht so recht, in welcher Form ich es am sinnvollsten mache.
Erst habe ich gedacht, nen Array mit allen Daten. Geht nicht, da die Anzahl unbekannt ist. Dann habe ich List<t> ausprobiert. Damit es "Mehrdimensional" wird, habe ich die Datensätze in ein Object mit den entsprechenden Feldern gesteckt. Die Rückgabe der List funktionierte, allerdings konnte ich die Objekte nicht extrahieren, bzw. darauf zugreifen. Das Ergebnis war immer classe.objekttyp. Nun bin ich beim DataSet angekommen. Mein plan: Es manuell zu befüllen, übergeben und dort per schleife auslesen um die ListView zu füllen.

Nun meine Frage, welchen Ansatz würdet ihr vorschlagen, um mein Problem zu lösen? Vielleicht auch einen ganz anderen?

Vielen Dank schonmal

Thomas