Laden...
Avatar #avatar-4072.jpg
Benutzerbeschreibung
Softwareentwickler aus OWL mit vielen Interessen. Hauptsächlich entwickele ich Desktopanwendungen mit WPF, bin aber auch ab und an mal in der Web- oder Mobil-Ecke unterwegs. Als Hobby beschäftige ich mich mit Embedded-Entwicklung, IoT und Smart Home.

Forenbeiträge von pinki Ingesamt 709 Beiträge

20.12.2016 - 11:35 Uhr

Es hat zwar nichts mit der eigentlichen Frage zu tun, ich erwähne es aber trotzdem mal:

Als Iconquelle sind ModernUI Icons und Material Design Icons ganz brauchbar, da man die Icons auch als XAML herunterladen kann.

07.12.2016 - 17:03 Uhr

So ist es.

Wenn man die Item-Eigenschaft in der Doku anklickt, sieht man, dass es sich dabei um den Indexer handelt:

public SearchResult this[int index] { get; }
05.12.2016 - 15:18 Uhr

Hallo Micha,
wenn du Windows Forms nutzt, dann schau dir mal [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox) an.

Gruß
Micha =)

05.12.2016 - 13:10 Uhr

Hallo,
wie wäre es mit einer eigenen Klasse und entsprechenden Eigenschaften dazu?
Dann kannst du das auch später problemlos erweitern ohne dir Gedanken zu machen, wie du deine Dictionarys ändern musst. Auch LINQ-Abfragen sind damit dann deutlich einfacher.

Um noch die Frage des Befüllens zu beantworten:

Events.Add("FooEvent", new Tuple<DateTime, DateTime>(DateTime.Now, DateTime.Now));
02.12.2016 - 12:28 Uhr

Hi!
Schau dir mal an, wie die das vom Extended WPF Toolkit beim ColorCanvas gemacht haben.
Ich denke, dass man das dort ganz gut nachvollziehen kann.

Suchst du denn wirklich RGB oder doch HSL?

02.12.2016 - 08:19 Uhr

Vom Hersteller des Mainboards (Asrock Mainboard Z75 Pro3) gibt es keine Treiber für die USB-Ports.

Die könnten auch zusammen mit dem Chipsatztreiber ausgeliefert werden.

02.12.2016 - 08:08 Uhr

Ich habe jetzt noch einmal explizit danach gesucht, finde jedoch nichts.

Such mal nach wpf bind sibling.

Kannst Du mir Deinen Quellenbezug verlinken? Würde mir die
Thematik gerne etwas näher anschauen.

Ich habe das auf stackoverflow gefunden: http://stackoverflow.com/a/16741102/1120056

02.12.2016 - 08:00 Uhr

Hallo und willkommen Skeptar,

{Binding Children[1].Foreground, RelativeSource={RelativeSource AncestorType={x:Type WrapPanel}}}

sollte das machen, was du möchtest.

01.12.2016 - 15:17 Uhr

Dann verschenk die Lizenzen doch zu Weihnachten. 👅

30.11.2016 - 11:16 Uhr

Wenn du daraus wieder ein Template baust, kannst du per TemplateBinding die Hintergrundfarbe übernehmen und wie bisher per Trigger setzen.

30.11.2016 - 10:40 Uhr

So ist der komplette "Button" klickbar:

    <TextBlock HorizontalAlignment="Center"
               VerticalAlignment="Center">
        <Hyperlink Command="{Binding TestCommand}"
                   TextDecorations="None"
                   Foreground="White">
            <Border BorderBrush="White"
                    BorderThickness="1"
                    Background="#FF2196F3">
                <StackPanel Margin="10">
                    <Image Source="meinbild.png"
                           Margin="0 0 0 5"
                           Width="32"/>
                    <TextBlock Text="Meine Beschriftung"/>
                </StackPanel>
            </Border>
        </Hyperlink>
    </TextBlock>

Edit: In diesem Fall sorgt die Hintergrundfarbe der Border dafür. Lässt man diese weg, ist wieder nicht mehr alles klickbar.

30.11.2016 - 10:09 Uhr

So ginge es auch:

<Border BorderBrush="White"
        BorderThickness="1"
        HorizontalAlignment="Center"
        VerticalAlignment="Center">
    <TextBlock Background="#FF2196F3">
        <Hyperlink TextDecorations="None"
                   Foreground="White">
            <StackPanel Margin="10">
                <Image Source="meinbild.png"
                       Margin="0 0 0 5"
                       Width="32"/>
                <TextBlock Text="Meine Beschriftung"/>
            </StackPanel>
        </Hyperlink>
    </TextBlock>
</Border>
30.11.2016 - 08:20 Uhr

Hallo und willkommen lanan94,
du könntest abfragen, ob die Felder leer sind und die dazugehörigen Berechnungen in dem Fall einfach weglassen. Dann tritt die Exception gar nicht erst auf.
Um auf auftretende Exceptions zu reagieren schau dir mal try, catch und finally an.

25.11.2016 - 13:45 Uhr

In dem Fall wird zeilenweise ein neues Paragraph-Objekt erzeugt und dem Dokument hinzugefügt.
Zwischen die Sternchen muss deine Variable, in der sich eine String-Aufzählung befindet. Jeder String davon steht für eine Zeile.

25.11.2016 - 13:14 Uhr

In deinem ViewModel legst du eine neue Property an.
Diese Property hat den Datentyp des Items, das in der ComboBox dargestellt ist, setzt im Setter die Model-Eigenschaft und ist an die SelectedItem-Eigenschaft der ComboBox cbTyp gebunden.

Ungetestetes Beispiel:

private Marke _selectedTyp;
public Marke SelectedTyp {
    get { return _selectedTyp; }
    set {
        _selectedTyp = value;

        Model = GetModelForTyp(value);

        OnPropertyChanged("SelectedTyp");
    }
}

private IEnumerable<string> _model;
public IEnumerable<string> Model {
    get { return _model; }
    set {
        _model = value;

        OnPropertyChanged("Model");
    }
}

25.11.2016 - 12:40 Uhr

Hallo und willkommen IcynatorHD,

in cbTyp kannst du SelectedItem noch binden (z.B. an die Property SelectedTyp).
Immer, wenn SelectedTyp gesetzt wird, setzt du den Wert für Model anhand des übergebenen Werts.
Wenn beim Setzen von Model das PropertyChanged-Event ausgelöst wird, solltest du dann in deiner zweiten ComboBox die entsprechenden Modelle haben.

24.11.2016 - 15:09 Uhr

Du kannst das PropertyChanged-Ereignis jedes Objekts in der ObservableCollection abonnieren und dann reagieren.
Und von der ObservableCollection abonnierst du CollectionChanged und kannst darin dann beim Hinzufügen von Objekten das PropertyChanged-Event des hinzugefügten Objekts abonnieren bzw. beim Entfernen das Abo kündigen.

Oder du bindest noch SelectedItem des DataGrids, damit du immer die aktuell ausgewählte Zeile hast. Beim Setzen der Property kannst du dann wiederum auch das PropertyChanged-Ereignis abonnieren bzw. das Abo vom vorher selektierten Objekt aufkündigen.

Bei welchem Objekt bzw. in welcher Zeile sich ein Wert geändert hat, wird dir ja über den Parameter sender beim Behandeln des Ereignisses mit übergeben.

24.11.2016 - 09:23 Uhr

Hallo Reggi,
wenn die Properties schon das PropertyChanged-Event auslösen, dann hast du eigentlich schon alles, was du brauchst.
Wenn du direkt bei jeder kleinen Änderung (z.B. der Eingabe jedes Buchstaben) benachrichtigt werden möchtest, dann kannst du beim Binding den UpdateSourceTrigger auf PropertyChanged setzen. Ansonsten wirst du benachrichtigt, wenn die Zelle den Fokus verliert.

24.11.2016 - 07:34 Uhr

Hallo Kassel,
ob es die Doku irgendwo auch auf Deutsch gibt, weiß ich nicht.
Ich denke aber, dass du dann ein wenig an deinem Englisch arbeiten solltest, da du so gut wie alles an Dokumentation in erster Linie erstmal auf Englisch finden wirst.

23.11.2016 - 07:14 Uhr

Hi Chierd,

Ich hatte auch schon an Grid mit Rowdefinitionen gedacht, aber es hat nicht funktioniert.

Genau das sollte aber funktionieren.
Wenn du deine RowDefinitionen so wählst, dass die Row, in der die deine CommandBar ist, Height="Auto" hat und die Row, in der die Karte ist, keine Height bzw. Height="*" zugewiesen bekommt.

22.11.2016 - 12:15 Uhr

Ich hatte gerade das Problem, dass die Spaltengrößenanpassung nicht mehr funktionierte, sobald sich das DataGrid (oder eines der Elemente, in dem es sich befindet) in einem ScrollViewer befindet.

Ich konnte das umgehen, indem ich die Width- des DataGrids an die ActualWidth-Property eines übergeordneten Objekts mit gleicher Breite gebunden habe.

22.11.2016 - 10:54 Uhr

Aus der Doku:

The objects used as keys by a T:System.Collections.Hashtable are required to override the M:System.Object.GetHashCode method (or the T:System.Collections.IHashCodeProvider interface) and the M:System.Object.Equals(System.Object) method (or the T:System.Collections.IComparer interface). The implementation of both methods and interfaces must handle case sensitivity the same way; otherwise, the T:System.Collections.Hashtable might behave incorrectly. For example, when creating a T:System.Collections.Hashtable, you must use the T:System.Collections.CaseInsensitiveHashCodeProvider class (or any case-insensitive T:System.Collections.IHashCodeProvider implementation) with the T:System.Collections.CaseInsensitiveComparer class (or any case-insensitive T:System.Collections.IComparer implementation).

14.11.2016 - 13:33 Uhr

Die Entwicklungsumgebung Visual Studio von Microsoft soll in wenigen Tagen für Apples macOS erscheinen. Das Programm soll einen einfachen Wechsel zwischen Windows und macOS zur Entwicklung von Mobile-Apps und Cloud-Anwendungen ermöglichen.

Link zum Artikel

11.11.2016 - 07:46 Uhr
  • warum schreibt man new object[] { msg } ?
    [...] Warum übergibt man nicht einfach ein string?

In diesem Fall kannst du das auch einfach so schreiben:

myObject.MyEvent += (sender, msg) => listBox1.Invoke(new Action<string>(HandleString), msg);

Die Signatur von Control.Invoke ist public object Invoke(Delegate method, params object[] args).

params bedeutet, knapp erklärt, dass du von außen beliebig viele Objekte (in diesem Fall vom Typ object) hintereinander übergeben kannst, die wiederum intern als Array ankommen.

09.11.2016 - 09:40 Uhr

Hallo Pardasus,
folgendes Beispiel:

Du hast eine Form- und eine Downloader-Klasse.
In der Form würdest du gern den Downloadfortschritt in % darstellen.

Im Form erstellst du dann z.B. ein Objekt vom Typ Progress<int> und abonnierst das ProgressChanged-Ereignis. Diesem wird der Fortschritt als int (da Progress<int>) übergeben und wird von der Form zur Aktualisierung des Fortschritts genutzt.

Das Progress<int>-Objekt wird dann dem Downloader übergeben (z.B. beim Anstoßen des Downloadvorgangs), damit dieser es für die Bekanntgabe des Fortschritts nutzen kann.
Während des Downloads setzt dieser per OnReport den aktuellen Fortschritt in %, was wiederum das ProgressChanged-Ereignis auslöst.

08.11.2016 - 13:58 Uhr

Hallo PhaseV,

es gibt auch Bibliotheken, die verschlüsselte zip-Dateien erstellen können.
Wäre das eine Möglichkeit?

08.11.2016 - 13:52 Uhr

Du könntest eine Anwendung schreiben, die als Ressource eine Konfigurationsdatei mit den Links enthält, diese Konfiguration ausliest, die Links herunterlädt und das dann ausführt.

Die exe-Datei dieser Anwendung könntest du in deinem Builder einbetten.
Der Builder würde dann die eingebettete exe-Datei nehmen und kopieren, dann die entsprechende Konfigurationsdatei erstellen und die entsprechende Ressource in der oben beschriebenen exe austauschen (z.B. mit Mono.Cecil).

Das wäre die einfachste Variante, die mir dazu spontan einfällt.

08.11.2016 - 09:21 Uhr

Das erledigt using von selbst.

07.11.2016 - 09:16 Uhr

Hallo Marabunta,
vor welchem Problem bei der Umsetzung stehst du denn jetzt?

Gruß

07.11.2016 - 09:02 Uhr

Hi!
Du könntest ein Behavior schreiben, das die Optionswerte beim Klicken zwischen VisibleWhenSelected und Collapsed wechselt.

Edit: "beim Klicken" hinzugefügt

28.10.2016 - 08:19 Uhr

Hallo zusammen,

der Slider befindet sich in einem Programm, mit dem man Variablen auf einem embedded System setzen kann.
Der Slider kann mit einer Variablen verknüpft werden und zeigt dann entweder den Wert an oder setzt ihn.
Nach dem Verknüpfen einer Variablen wird der Wertebereich des Typen als Grenze des Sliders gesetzt.
Normalerweise stellt man den Wertebereich aber danach selbst ein.
Mich hätte es jetzt nur gefreut, wenn das bei double-Variablen auch so funktioniert hätte.

27.10.2016 - 14:35 Uhr

Um Genauigkeit beim Setzen geht es mir dabei nicht.
Ich fänd's halt super, wenn ich mir den Variablenwert dort darstellen lassen könnte.
In dem Programm wird dieser Wertebereich wahrscheinlich nie verwendet werden, aber ich hätte es trotzdem toll gefunden, wenn es ginge.

Wenn ich die Grenzen jeweils mit 0.1 multipliziere, ist der Bereich ja immer noch riesig, dort funktioniert der Slider jedoch bestens.

Edit:
Durch Probieren habe ich gerade festgestellt, dass der Bereich von double.MinValue bis double.MinValue + 100 auch nicht geht.
In dem Fall dürfte es nicht am dargestellten Bereich liegen.

27.10.2016 - 14:11 Uhr

Hallo zusammen,

ich würde gern einen Double-Wert per Slider setzen können.
Das Problem ist jetzt, dass der Slider dies nicht kann, obwohl die Minimimum- und die Maximum-Property vom Typ double sind.

Mit folgendem Code ist der Slider nicht mehr zu gebrauchen:

DoubleSlider.Maximum = double.MaxValue;
DoubleSlider.Minimum = double.MinValue;

Kennt ihr ein (am besten kostenfreies) Slider-Control, mit dem ich den kompletten Double-Bereich abdecken kann oder könnt mir die Grenzen sagen, bis zu denen das Slider-Control funktioniert?

Gruß
Micha

27.10.2016 - 08:05 Uhr

Ich werfe mal den Exoten YAML in die Diskussion.
Es ist ähnlich simpel wie eine INI-Datei aufgebaut, kann aber weitaus mehr (und Kommentare gehen auch).

25.10.2016 - 08:56 Uhr

Wie hätte man das mit den port verbunden?

Genau so wie vorher.
WIe das geht, hast du bereits zum Teil geschafft und der Rest wurde beschrieben.

24.10.2016 - 08:36 Uhr

Gibt es da eine Möglichkeit, dem Converter noch irgendwelche Informationen über die Fenstergröße mitzugeben?

Du könntest IMultiValueConverter implementieren und dann entsprechend die zusätzlichen Werte mit übergeben.

21.10.2016 - 11:50 Uhr

Hallo Thomas,
lass dich von dem ListControl in der Doku nicht irritieren.
Wenn du dir die Dokuübersicht der Klasse ListControl ansiehst, ist dort die ComboBox unter den abgeleiteten Klassen aufgeführt.
Die ComboBox ist somit auch ein ListControl und die Doku der entsprechenden Eigenschaft im abgeleiteten Control verweist auf die Doku der geerbten Eigenschaft.

Gruß
Micha

21.10.2016 - 11:26 Uhr

Hallo und willkommen SiCuSoft!

Standardmäßig schreibt die ComboBox den Rückgabewert der ToString-Methode hinein. Im einfachsten Fall könntest du diese also überschreiben.
Du kannst aber auch an die DisplayMember-Eigenschaft den Namen der darzustellenden Eigenschaft übergeben.

21.10.2016 - 09:10 Uhr

Fürs Verbinden schon, aber nicht dafür um Punkte zum Chart hinzuzufügen...
Neue Punkte sollen doch erscheinen, wenn neue Daten da sind, oder?

Hast du dein Programm schon mal mit dem Debugger aufgerufen und angesehen, was wann passiert und welche Daten ankommen?

20.10.2016 - 14:24 Uhr

Schau dir mit dem Debugger ([Artikel] Debugger: Wie verwende ich den von Visual Studio?) an, was ankommt.

Dann musst du gucken, wie du dort am besten die Einzelwerte extrahierst.
Für jeden Einzelwert erstellst du einen Punkt und zählst deine Zeitvariable hoch.

20.10.2016 - 14:01 Uhr

Nach dem ersten Wert ja. Nach dem zweiten Wert ist er 7 usw.

Du zählst rt hoch, damit du das als X-Wert eintragen kannst.
Der Y-Wert ist der dazugehörige Messwert und denn musst du, wie bereits gesagt, noch aus dem ausgelesenen Wert holen.

20.10.2016 - 13:54 Uhr

Dann könntest du z.B. bei jedem empfangenen Wert deine Zeitvariable um 3,5 ms hochzählen.
Wie viele Werte du empfängst, kannst du im DataReceivedHandler herausfinden.

20.10.2016 - 12:49 Uhr

Hi!
Das Event löst nicht jedes Mal für die 16 Byte aus, da (wenn ich das richtig in Erinnerung habe) die eingehenden Daten intern gepuffert werden.
Dadurch ist dann auch nicht sichergestellt, dass jedes Mal deine 16 Byte im Event ankommen. Es können mal mehr und mal weniger sein.

20.10.2016 - 11:45 Uhr

Du setzt rt immer noch nicht hoch (da der Timer nicht gestartet wird) und machst mit den Messwerten nichts außer sie zur TextBox hinzuzufügen.

Wenn du weißt, in welchem Abstand die Messwerte genommen werden, kannst du rt auch nach jedem Auftreten eines neuen Werts entsprechend hochzählen. Beachte aber, dass pro Aufruf von DataReceivedHandler auch mehr als ein Datensatz oder unvollständige Datensätze enthalten sein können.

19.10.2016 - 15:05 Uhr

Hi Stu,
klappt es, wenn du den Uri nach dem Schema pack://application:,,,/DeinAssemblyName;component/images/splashscreen.png (wie hier beschrieben) angibst?

Gruß
Micha

13.10.2016 - 14:40 Uhr

Das sieht nicht danach aus als würden dort Templates für Chrome-Ereiterungen enthalten sein (hab's auf Github aber auch nur kurz überflogen).

Les dich doch erstmal über die verlinkten Seiten in die Materie ein oder such dir ein paar halbwegs passende Tutorials.
Einfach auf blauen Dunst was probieren und nicht verstehen, was man macht, bringt dir nichts.

13.10.2016 - 14:01 Uhr

Ich habe selbst noch keine Browsererweiterung geschrieben und kann dir deshalb darüber nichts sagen.
Es gibt aber ein Getting Started.

Edit: Die Basics vom Abschnitt davor können bestimmt auch nicht schaden.

13.10.2016 - 10:59 Uhr

Hi,
willst du das bei dir im Programm in einem eingebetteten Browser ausfüllen oder in einem Browser, der nicht in deinem Programm sitzt?

Für den ersten Fall schau mal in die Suche: Forumssuche nach browser login
Für den zweiten Fall müsstest du ein Browser-PlugIn programmieren, wenn ich nicht irre.