Autor Beitrag
Greenberet
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 339
Erhaltene Danke: 20

Win 10
C# (VS 2012), C++ (VS 2012/GCC), PAWN(Notepad++), Java(NetBeans)
BeitragVerfasst: So 26.01.14 12:43 
Guten Morgen,

ich bin jetzt mal wieder seit längeren dabei mich mit WPF zu spielen.

Für eine Zeitsteuerung muss der User in der Lage sein Feiertage einzutragen.

Das mache ich derzeit mit dem standard Calendar Control. SelectionMode ist auf MultipleRanges und das funktioniert auch soweit.

Allerdings muss man hierführ immer die Strg-Taste gedrückt halten. Ansonsten wird bei einem Klick alles vorherige abgewählt und nur das neueste Aktiv.

Wie bekommt man es am einfachsten hin, dass die Daten bei einem Klick getoggled werden?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 26.01.14 14:11 
Hallo!

Ich hatte an sowas gedacht:
ausblenden C#-Quelltext
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:
    private void mycalendar_SelectedDatesChanged(object sender, SelectionChangedEventArgs e)
    {
      if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
        return;

      if (e.RemovedItems.Count == 0//vorher war nichts markiert, also auch nichts zu tun
        return;
      else
      {
        var removedItems = e.RemovedItems.Cast<DateTime>().ToArray();
        var addedItems = e.AddedItems.Cast<DateTime>().ToArray(); ;

        var removeItems = addedItems.Where(i => removedItems.Contains(i)).ToArray();  //die Daten, die innerhalb der vorherigen Auswahl lagen, müssen in Wahrheit entfernt werden

        mycalendar.SelectedDatesChanged -= mycalendar_SelectedDatesChanged; //sich selbst nicht wieder aufrufen ...

        foreach (var date in removedItems) //erstmal die Daten, die entfernt wurden, wieder hinzufügen
          if (!mycalendar.SelectedDates.Contains(date))
            mycalendar.SelectedDates.Add(date);

        foreach (var date in removeItems) //die "wirklich" zu entfernenden Items raus
          mycalendar.SelectedDates.Remove(date);

        mycalendar.SelectedDatesChanged += mycalendar_SelectedDatesChanged;
      }
    }

Allerdings funktioniert das noch nicht ganz, insbesondere wenn mehrere Daten ausgewählt sind und dann mehrere Daten getoggelt werden sollen. Kompliziert wird es auch, wenn ein paar der neu ausgewählten Daten in der vorherigen Auswahl lagen und ein paar nicht ;-)

Vielleicht kannst Du daraus ja aber irgendwas funktionierendes bauen :)

Viele Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Greenberet Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 339
Erhaltene Danke: 20

Win 10
C# (VS 2012), C++ (VS 2012/GCC), PAWN(Notepad++), Java(NetBeans)
BeitragVerfasst: Mi 29.01.14 01:18 
Vielen Dank schonmal =)

von der Programmlokig ist es eig jetzt genau so wie ich es wollte.

das einzige Problem ist, dass während man mehrere Tage selektiert, die bestehenden nicht angezeigt werden. Sobald man aufhört sind die neuen und alten Werte wieder sichtbar.(sofern diese nicht gelöscht wurden)