Laden...

Forenbeiträge von _Cashisclay Ingesamt 277 Beiträge

18.04.2016 - 09:15 Uhr

Hey ho,

war über das Wochenende nicht Online. Werd mich die Tage aufjedenfall noch einmal mehr mit dem MVVM auseinandersetzen.

Wenn ich das halbwegs richtig verstanden habe (und ich trau mich kaum noch etwas zu dem Thema zu sagen) soll ich anstatt meine "frimel" Lösung zu nutzen mir einfach statt der Property wo das DataTable drinne ist woraus ich meine Daten ziehe, für jede Spalte aus der DT eine Property anlegen und dort den Wert hinterlegen um dann das ganze zu Binden.

Grüße

15.04.2016 - 14:17 Uhr

Speziell wenn man wie _Cashisclay einen einzelnen Wert aus einer DT an die View binden will ist doch so ein 5 Zeiler echt schnell geschrieben, statt jetzt insgesamt 2 Tage dran zu laborieren.

Ich entnehme 26 Spalten aus der DataTable und wollte mir nicht für jede einzelne Spalte eine einzelne Property anlegen.

15.04.2016 - 13:01 Uhr

Hallo Coffeebean,

danke für deine Antwort. Ich werd mir das zu Herzen nehmen und mir das wirklich noch einmal ansehen. Ich kann deine Punkte zu 100% nachvollziehen. Ich hab auch schon FZelle verstanden, nur ist es immer das gleiche, ich versteh das man das Problem an der Wurzel packen möchte, aber jetzt in dem Moment habe ich eine Lösung zu dem Problem gesucht, aber FZelle als Beispiel hat 0,0 auch nur im Ansatz versucht darauf einzugehen, falls er denn darin Erfahrung hat.

Er hat wie so viele im Forum einfach die komplette Frage überworfen und unterm Strich meine Fragestellung irgendwo ignoriert .. "Ah, der macht das falsch ... Hier guck dir MVVM mal ordentlich an."

Ja, nice. Hilft mir in der Situation zwar 0 weiter, aber danke.

15.04.2016 - 11:54 Uhr

Für mein Problem bzw. meine Frage ist das genau die Lösung die ich auch gesucht habe, das man das ganze eventuell anders angehen sollte und besser umsetzen kann, möchte ich nicht abstreiten, aber für meine Frage und jede andere die sich darauf bezieht, ist das erstmal eine Lösung.

15.04.2016 - 10:10 Uhr

Hallo,

danke für die Antworten. Ich hab gestern leider eine Menge probiert und dadurch zuvor mein Grid ein neuen DataContext zugewiesen daher ging das ganze nicht.

Für alle die diesen Beitrag sehen und eine Lösung suchen :

Wenn ihr eine DataTable habt mit nur einem Eintrag (ist bei mir der Fall) dann einfach folgendes nutzen :


<TextBox Text="{Binding EuerDataTableName.Rows[0][EuerSpaltenName]}/>

Grüße

15.04.2016 - 09:40 Uhr

Okay, werd ich machen, aber heißt das jetzt in erster Linie das es nicht geht?

15.04.2016 - 09:34 Uhr

Hallo Liebe Community,

ich hab das Problem, das ich mehrere DataTables in meinem ViewModel habe, dieses dann dem DataContext zuweise und nun gerne einzelne Spalten aus einzelnen Tabellen auf TextBoxen binden möchte (via Xaml).

Ist das möglich? Hat jemand damit Erfahrung?

Ich hab schon viel beim Googlen gefunden, aber bisher hat nichts funktioniert.

Bsp:

Text={Binding Source = Kunde, Path = Rows[0][LASTNAME0]}

Grüße

05.04.2016 - 11:36 Uhr

Hallo liebe Community,

wenn ich in meiner ComboBox einen Eintrag auswähle, wird eine längere Berechnung durchgeführt.
Dadurch wird die gesamte Anwendung erstmal blockiert und das sieht natürlich ziemlich hässlich aus.

Ich hab es schon mit System.Windows.Forms.Application.DoEvents() ausprobiert, hat nur leider nicht funktioniert, hatte eigentlich bis jetzt damit gute Erfahrungen gesammelt.

Kennt sich jemand damit aus?

Grüße

04.03.2016 - 09:46 Uhr

Hallo mikefried,

du definierst dir deine neue DataTable, ein sqlCommandString (mit dem Inhalt deiner sql Abfrage).

Dann füllst du deinen Command mit deiner Connection und deiner Abfrage, übergibst den Command einem SqlDataAdapter und befüllst mit Hilfe des Adapters deine DataTable.

Vergleichen kannst du deine DataTables dann in dem durch jede Zeile überprüfst.

Grüße

03.03.2016 - 11:42 Uhr

Ich kann damit Leben, ich habe auch ein wenig das Gefühl das du mich falsch verstehst, ich erwarte hier keine Zauberei. Niemand der hier ins Thread guckt und sagt ja klar hier nimm diesen Quellcode dann gehts. Ich hab lediglich nach Erfahrungen gesucht, die hab ich gefunden.

Die Tendenz geht auch Richtung Datenbank, ich teile da Bernd seine Ansicht und empfinde das auch absolut nicht als Stolperfalle und ich denke ( ich nehme jetzt auch "mein" Wort ) du verkrampfst dich auf dein ClickOnce, nach dem Motto wie du das mit den Fäusten beschrieben hast, "nehmt Clickonce, es ist gut, es ist gut".

Mal sehen ob es dabei bleibt oder ob noch jemand eine Idee hat 😃.

In jedem fall hat mir das ganze hier geholfen.

03.03.2016 - 09:04 Uhr

Logischerweise sind die Lösungsansätze nicht das was ich mir in erster Linie vorgestellt habe, hatte ich aber bereits mehrmals erwähnt, das ich vermutet habe, dass das ganze ein wenig leichter ist.

Mir gibt niemand ständig Auskunft über die User, ich sehe dass das Programm benutzt wird, wenn ich es austauschen möchte und wenn das nicht geht mach ich es halt zu einem späteren Zeitpunkt.

Ich habe mich belesen über ClickOnce, ich habe gegoogled und einen Blick drüber geworfen, finde die Unterstellung an dieser Stelle einfach unangebracht, das Problem dabei ist, das es nicht meine Aufgabe ist, mit ClickOnce unsere gesamte Struktur über den Haufen zu werfen, das einzige was ich machen kann, ist vorzuschlagen, das sich der zuständige dafür das ganze mal ansehen könnte.

Und eine Lösungsansatz vorzuschlagen und sich auf ClickOnce zu verkrampfen halte ich für genau so falsch, es sind nun mal die gegebenen Möglichkeiten vorhanden, damit muss man arbeiten und versuchen so eine Lösung zu schaffen, wo ja auch schon viele gute Vorschläge kamen, das darf man auch nicht vergessen.

Wenn du aber den Leuten die eventuell nicht jeden Tag ins Forum gucken, das Recht verwehren möchtest ihr Wissen in dem Thread mit uns zu teilen, dann schließ das Ding halt.

03.03.2016 - 08:22 Uhr

Ich darf leider nicht mehr zitieren :x

Netter Vorschlag, das Ding ist, ich hätte nicht gedacht dass das ganze so komplex wird, ich dachte schon das ich mir alle Computer im Netzwerk auslesen lassen kann und darüber irgendwie auf den ihre Prozesse, aber scheint ja so in der Form nicht möglich zu sein.

Zu deiner Frage mit dem Windows Server die hab ich deswegen nicht beantwortet, weil ich keine Ahnung habe und allgemein dahingehend nicht sehr gut bewandert bin und mich nicht zum Plepo machen wollte X(

02.03.2016 - 12:28 Uhr

Wäre es sehr provokant deinen Beitrag jetzt zu zitieren? 😮

Ja, ich lass es, sorry.

Ich geb mir bereits mühe, mehr darauf einzugehen, hab extra gerade nochmal nachgefragt was ihr euch darunter vorstellt 😕

02.03.2016 - 12:08 Uhr

Also das auslesen der Prozesse von einem Computer im Netzwerk scheint also so einfach nicht möglich zu sein, weil ihr ja alle die eine Methode vorschlagt, die mit Sicherheit auch funktionieren würde und plausibel klingt, danke dafür.

Eine Frage hätte ich noch, wie sollte man es denn anders angehen? Der andere Weg wäre doch, jedem Benutzer das Programm auf seinem Rechner zur Verfügung zu stellen, es wird also nicht mehr via Verknüpfung auf den jeweiligen Ordner im Firmennetzwerk gestartet, sondern nur noch vom eigenen PC aus.

Wenn ich jetzt Änderungen mache und wenn es nur schnelles Bug Fix ist, muss ich doch trotzdem jedem einzelnen die neue Version zu kommen lassen, wo dieser die dann überschreiben muss.

Ich seh kein Vorteil darin. So tausch ich die Datei auf dem Netzwerk aus und alle Verknüpfungen greifen dann auf die neue Version zu.

PS : ich wollte hier niemanden dumm anmachen oder so ich bin sehr dankbar für eure Vorschläge und versteh auch den Sinn das man das Problem an der Wurzel packen sollte, aber es ist nicht meine Aufgabe aktuell die komplette Struktur für alles ändern zu lassen bzw. war das anfangs ja auch nicht meine Frage 😮

Grüße

02.03.2016 - 11:18 Uhr

Ich freue mich über jede Antwort. Fakt ist aber ihr umgeht immer die Fragestellung, mag sein dass das ganze eventuell falsch aufgezogen wurde, ich find das ganze nicht schlimm. Es ist eine .exe von einem geschriebenen Programm was in einem bestimmten Ordner liegt worauf die jeweilige Abteilung zugreifen kann. Meiner Meinung nach legitim.

Wenn ich die Version ändere, ändere ich sie für alle.

Aber kaum jemand antwortet auf meine Frage, sondern sagt mir wie auch in anderen Themen wo ich eine Frage stelle, warum macht ihr das so. Ist doch falsch.

Ändert aber nichts an meinem Problem, bzw an dem was ich vor habe.

Grüße

02.03.2016 - 10:46 Uhr

Hallo Bernd,

danke für deine Antwort.

Klingt nach einer Datenbank Lösung? Ich hab mir bereits auch schon eine aufgemalt, aber gibt es keine andere Möglichkeit, kann man sich das ganze nicht Codeseitig auslesen lassen?

Grüße

02.03.2016 - 10:36 Uhr

Zum mindest für Windows Server 2008 R2 scheint folgendes zu helfen
>
.
Ist also auch ne Frage was im Einsatz ist.

Ich will die nicht auf Krampf schließen. Am liebsten würde ich mir gerne auslesen lassen von allen Computern ob das Programm geöffnet ist, das würde mir persönlich reichen.

Der nächste Schritt wäre dann den Prozess auf Krampf zu schließen.

Ich goggle nebenbei ja auch, konnte leider noch nichts finden, was mir weiterhilft.

Welche PC's gerade Aktiv sind soll man sich wohl aufjedenfall auslesen lassen können.

Grüße

02.03.2016 - 10:23 Uhr

Wir haben die Software bei uns im Netzwerk liegen, dort wird diese dann von mehreren Mitarbeitern ausgeführt.

Ich würde jetzt gerne wissen ob und wie es möglich ist auszulesen, welcher Nutzer denn die Software gerade benutzt.

Grüße

02.03.2016 - 10:04 Uhr

Hallo Community,

vllt hat ja jemand schon Erfahrungen damit sammeln können! Ich brauch mal wieder eure Hilfe, Denkanstöße und Ratschläge.

Mich nervt es momentan ganz schön, wenn ich Versionen von Programmen austauschen möchte und diese in Benutzung sind, ich dann den Weg in der Firma suchen muss, um herauszufinden wer das gerade nutzt.

Gibt es eine Möglichkeit sich auslesen zu lassen wer alles das Programm nutzt? Aus dem Netzwerk heraus?

Gruß

_Cashisclay

02.03.2016 - 09:31 Uhr

Ich extrahiere aus einer bestehenden PDF die einzelnen Seiten als Bilder.

Zu vor hab ich sie in 92 DPI erstellt, die Folge war eine schlechte Qualität.

Als ich das ganze auf 400 DPI umgestellt hab kam das ganze Bild zu stande.

Das hatte aber nichts mit dem Webbroswer zu tun, sondern wenn ich die PDF mit Hilfe des Bild erstelle musste ich zuvor weder Höhe noch Breite angeben bei 92 DPI wusste er das selber.

Bei 400 DPI kam das ganze dabei raus, mit Höhe und Breitenangaben war das Problem gelöst.

Deswegen "ich bin dumm". Das wird nicht wirklich jemanden weiterhelfen, da wahrscheinlich jeder diese Angaben mit übergibt 😃.

Grüße

_Cashisclay

01.03.2016 - 11:53 Uhr

Kann geschlossen werden.

Grund : Ich bin dumm. 😃

01.03.2016 - 11:03 Uhr

Hallo Community,

ich hab folgendes Problem. Ich lade eine PDF in das Steuerelement WebBroswer ein und die PDF wird nicht komplett angezeigt. Die PDF an sich ist aber korrekt, kann auch ordentlich geöffnet werden etc.

Jemand eine Idee?

Gruß

_Cashisclay

06.01.2016 - 14:40 Uhr

Das glaub ich dir, es war auch nicht böse von mir gemeint, nur hab ich das ja schon ganz oben bereits geschrieben und als nächstes kommen dann diese Fragen 😛

Ich bin trotzdem sehr dankbar 😃

06.01.2016 - 14:00 Uhr

Hey Leute,

erstmal danke für eure Antworten. Ich bin dankbar dafür das ihr mir bei meinem Problem helfen wollt, nur versteh ich nicht warum das ganze egal bei welchem Thema erstmal hinterfragt wird.

Es ist ja nun mal ein Fakt was ich beschrieben habe, so ist die Situation.

Das Problem ist das die PDF's (die alten) über eine alte Version von einem Programm erzeugt wurden, aus irgendeinem Grund mag dass das Fax-Gerät nicht und wie bereits beschrieben geht der Mittelteil komplett verloren. Warum? Irrelevant da die PDF's nicht mehr so erzeugt werden, die alten sind trotzdem so erzeugt worden.

Bemerkbar hat sich das so gemacht in dem halb leere PDF's beim Kunden gelandet sind.

Ich habe das ganze nun so gelöst :

Die alte PDF genommen - den Inhalt als PNG übernommen - die Bilder als neue PDF wieder zusammen gebastelt

Danke für eure Denkanstöße

Grüße

06.01.2016 - 08:17 Uhr

Hoi,

stell dir vor du hast eine PDF mit einer Kopfzeile einem Body Bereich mit Informationen und der Fußzeile, beim Versand via Fax geht aufgrund der alten generierung dieser PDF der gesamte Body Bereich verloren.

Das muss irgendwas mit der Kodierung zu tun haben. Fakt ist ich brauche sämtliche Seiten aus der PDF neu.

Ich hab lediglich ein Bild hinzugefügt und die PDF neu abgespeichert, das hat nicht funktioniert.

Gruß

06.01.2016 - 07:32 Uhr

Guten Morgen Liebe Community,

ich brauch mal wieder euren Rat.

Ich muss eine bestehende PDF neu erzeugen. Die alte wurde irgendwie so erzeugt das wir sie nicht via Fax verschicken können, dann kommen beim Empfänger nur leere PDF's an mit Kopf und Fußzeile aber der Inhalt ist nicht mehr vorhanden.

Nun hab ich einfach versucht die bestehende neu zu erstellen mit Hilfe der ITextSharp.dll
leider ohne Nennenswertes Ergebnis.

Hat jemand eine Idee wie ich aus der alten PDF eine neue erzeugen kann, so das diese wieder versendbar ist?

Grüße

04.12.2015 - 10:00 Uhr

Hallo gfoidl,

das mit dem ausgrauen wäre meiner Meinung nach nur eine von vielen Möglichkeiten, angenommen ich würde eine weiteres Fenster öffnen, wo der Ladevorgang irgendwie Transparent dargestellt wird, bzw allgemein einfach vor dem aktuellen Fenster sich befindet, finde ich das ausgrauen einen netten optischen Effekt.

An sich hab ich auch schon über eine Statusleiste etc. nachgedacht, ist aber irgendwie die "hässlichere" Variante.

Ich lade nicht sämtliche Daten, aktuell zum Beispiel muss der Benutzer eine Eingabe tätigen daraufhin werden ihm Daten zur Verfügung gestellt, der erste View der geladen wird, dauert nun mal 2 Minuten, daran kann man so auch nichts ändern. Ansonsten versteh ich deinen Ansatz.

04.12.2015 - 09:42 Uhr

Hallo Community,

ich bräuchte mal wieder eure Hilfe, euren Rat, eure Erfahrungen bzw herangehensweise an eine Idee.

Mittlerweile haben sich des öfteren in diversen Programmen bei mir eine gewisse Ladezeit durch Datenbankabfragen etc. eingeschlichen.

Nun möchte ich mir schon seit längerem eine Anzeige für die Ladezeit basteln.

Die Vorstellung dahinter ist eigentlich bei jedem Vorgang der etwas länger brauch zu laden eine Progressbar oder etwas ähnliches zu öffnen die Quasi in der Mitte der Anwendung angezeigt wird (über der Anwendung quasi) und die gesamte Anwendung dahinter ausgraut.

Ich hab mich schon diverse male versucht ein wenig zu informieren, nicht viel, weil ich nebenbei arbeite, aber ein wenig und schon oft das Thema Splashscreen gelesen.

Habt ihr persönlich sowas schon gebastelt, ist meine Idee so an sich umsetzbar (leicht?) oder gibt es leichtere Wege.

Grüße

EDIT : So ungefähr stell ich mir das vor :

13.10.2015 - 12:13 Uhr

Hatte ich versucht, nur nicht hinbekommen, aber vllt versteh ich da auch was falsch, ich hab zwar jetzt eine Lösung, aber eventuell könntest du mir das ja trotzdem etwas näher erklären.

Lösung :

Dim _Stream AS Stream = New MemoryStream(System.Text.Encoding.Default.GetBytes(_Xml_Document.InnerXml))

WebBrowser.NavigateToStream(_Stream)
13.10.2015 - 12:03 Uhr

Ich erstelle den HTML Code selber programmtechnisch und möchte das Control eigentlich nur als Vorschau nutzen und dachte dort gibt es eventuell eine Einstellung die das ganze ermöglicht.

Edit : Ich schick das ganze danach an eine Schnittstelle die diese Information anscheind auch nicht braucht, weil sie das ganze selber verarbeitet, deswegen würde ich gerne nur für diese Vorschau das ganze ermöglichen.

13.10.2015 - 11:47 Uhr

Hallo liebe Community,

weiß jemand wie man im Control WebBrowser Umlaute richtig darstellt?

Grüße

25.08.2015 - 12:53 Uhr

Hallo liebe Community,

ich habe ein Problem eventuell kann mir jemand weiterhelfen, ich möchte mich mit Hilfe der Magento Api an unser Testsystem anmelden, vor dem Testsystem existiert eine Baustelle (HTAccess)
ich glaube dadurch bekomm ich beim Login jedes mal eine Fehlermeldung :> Fehlermeldung:

Die HTTP-Anforderung ist beim Clientauthentifizierungsschema "Anonymous" nicht autorisiert. Vom Server wurde der Authentifizierungsheader "Basic realm="Login"" empfangen.

Ich habe schon versucht mich via NetworkCredential und WebRequest mich daran anzumelden, jedoch ohne Erfolg, hat jemand eine Idee?

Grüße

05.05.2015 - 11:55 Uhr

Danke für die schnellen Antworte, ich les mir gleich mal eure beiden Quellen Angaben durch, in einen Background-Thread hab ich das ganze schon umgelagert in dem neuen Fenster, habe aber trotzdem keinen Zugriff auf das andere Fenster. (Eventuell mach ich was falsch?)

Grüße

05.05.2015 - 11:01 Uhr

Hallo Liebe Community,

ich suche mal wieder euren Rat, ich möchte bei jeder Fehlermeldung ein neues Fenster öffnen lassen, wo dem Nutzer die Möglichkeit geboten wird, mir diese Fehlermeldung via Email zusenden,
nur soll wenn man dann die Email über den Button versendet, das neue Fenster eigentlich geschlossen werden, das man im alten weiterarbeiten kann, nur dauert leider das versenden der Email seine Zeit und wenn ich das Fenster sofort schließen lasse, wird nie eine Email versendet.

Minimieren kann ich das Fenster auch nicht um dann im alten weiterarbeiten zu lassen, aufgrund dass das alte Fenster gesperrt ist, bzw nicht anklickbar, sicherlich weil im neuen noch die Email versendet wird.

Was kann ich da am besten tun? Das die Email versendet wird und man sofort im alten Fenster weiterarbeiten kann?

Grüße

Cashsiclay

05.02.2015 - 10:41 Uhr

@FZelle, passt zwar gerade leider nicht zum Thema, aber sorry mal an dieser Stelle, so wie sich das jeder vorstellt das der ideal User erstmal schön sich durch die Suche kämpft, so ist das nun mal nicht, ich hab jetzt auch ein paar mal die Suche benutzt und bin nicht fündig geworden und bevor man sich durch 10.000 erklärte Threads sucht, posted man die Frage halt nochmal in der Hoffnung so schneller eine adequate Antwort auf seine Frage zu bekommen, an der man eventuell schon eine Weile sitzt, weil man selber versucht das ganze zu lösen, ich weiß dieses denken ist egoistisch und die Suche ist da um sie zu benutzen, aber man muss ja auch nicht gleich pampig kommen, wenn man das nicht macht.

Sorry an dieser Stelle, ist auch nicht böse gemeint.

04.02.2015 - 10:30 Uhr

Joooooooooooop, konnte seit langer Zeit mal wieder in Ruhe über das Projekt gucken, der Debug Tipp war gut, hab das ganze mal ausgelagert und in einem neuen Projekt aufgebaut um, einen ganz neuen Blick über die Sache zu bekommen, war einen Binding Fehler und Konvertierungsfehler, viel Drama um nichts, aber die Tipps haben mir für die Zukunft trotzdem geholfen, danke.

Kann geschlossen werden.

04.02.2015 - 09:26 Uhr

Hat jemand noch eine Idee? Könnte es wirklich mit dem auf sich selbstzeigenden DataContext zu tun haben?

03.02.2015 - 13:12 Uhr

Das Ausgabe Fenster sagt folgendes :

Fehlermeldung:
System.Windows.Data Error: 40 : BindingExpression path error: 'Von' property not found on 'object' ''RangeSlider' (Name='mySlider')'. BindingExpression:Path=Von; DataItem='RangeSlider' (Name='mySlider'); target element is 'RangeSlider' (Name='mySlider'); target property is 'LowerValue' (type 'Double')

29.01.2015 - 07:52 Uhr

Bisher hat nichts geholfen ;/

22.01.2015 - 12:37 Uhr

Mein RangeSlider :

<UserControl x:Class="RangeSlider"
             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:local="clr-namespace:Watchdog"
             mc:Ignorable="d" 
             d:DesignHeight="20" d:DesignWidth="300"     
             x:Name="root">

    <UserControl.Resources>
        
        <!-- Farbverlauf - Thumb -->
        
        <LinearGradientBrush x:Key="Thumb" StartPoint="0,0" EndPoint="0,1">
            <GradientStop Offset="0" Color="#f7f7f7"/>
            <GradientStop Offset="1" Color="#bcbcbc"/>
        </LinearGradientBrush>

        <!-- Style - Thumb -->
        
        <Style x:Key="Thumb_Style" TargetType="{x:Type Thumb}">
            <Setter Property="SnapsToDevicePixels" Value="true"/>
            <Setter Property="OverridesDefaultStyle" Value="true"/>
            <Setter Property="Height" Value="14"/>
            <Setter Property="Width" Value="14"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Thumb}">
                        <Ellipse Name="Ellipse" Fill="{StaticResource Thumb}" Stroke="#404040" StrokeThickness="1" />
                        
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter TargetName="Ellipse" Property="Fill" Value="#808080"/>
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter TargetName="Ellipse" Property="Fill" Value="#EEEEEE"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                        
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

        <!-- ControlTemplate - Slider -->
        
        <ControlTemplate x:Key="RangeSlider" TargetType="{x:Type Slider}">
            <Border SnapsToDevicePixels="true" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto" MinHeight="{TemplateBinding MinHeight}"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>

                    <Rectangle x:Name="PART_SelectionRange"/>

                    <Track x:Name="PART_Track" Grid.Row="1">
                        <Track.Thumb>
                            <Thumb x:Name="Thumb" Style="{StaticResource Thumb_Style}"/>
                        </Track.Thumb>
                    </Track>
                </Grid>
            </Border>
        </ControlTemplate>

    </UserControl.Resources>
    
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="10"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="10"/>
        </Grid.ColumnDefinitions>
        
        <Grid.RowDefinitions>
            <RowDefinition Height="20"/>
        </Grid.RowDefinitions>

        <Grid Grid.Column="1">
            <Border BorderThickness="2,0,2,0" BorderBrush="DarkGray" Margin="-2,0,-2,0"/>

            <Border BorderThickness="0,2,0,0" BorderBrush="DarkGray" VerticalAlignment="Center" Height="1" Margin="5,0,5,0"/>

            <Slider x:Name="LowerSlider" Minimum="{Binding ElementName=root, Path=Minimum}" Maximum="{Binding ElementName=root, Path=Maximum}" Value="{Binding ElementName=root, Path=LowerValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Template="{StaticResource RangeSlider}"  Margin="0,0,10,0" ToolTip="Von" VerticalAlignment="Center"/>

            <Slider x:Name="UpperSlider" Minimum="{Binding ElementName=root, Path=Minimum}" Maximum="{Binding ElementName=root, Path=Maximum}" Value="{Binding ElementName=root, Path=UpperValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Template="{StaticResource RangeSlider}"  Margin="10,0,0,0" ToolTip="Bis" VerticalAlignment="Center"/>
        </Grid>
    </Grid>
    
</UserControl>

Partial Public Class RangeSlider
    Inherits UserControl
    Implements ComponentModel.INotifyPropertyChanged

    Public Sub New()

        ' Dieser Aufruf ist für den Designer erforderlich.
        InitializeComponent()

        ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.

        Me.DataContext = Me
    End Sub

    Public Shared ReadOnly MinimumProperty As DependencyProperty = DependencyProperty.Register("Minimum", GetType(Double), GetType(RangeSlider), New UIPropertyMetadata(0.0))
    Public Shared ReadOnly LowerValueProperty As DependencyProperty = DependencyProperty.Register("LowerValue", GetType(Double), GetType(RangeSlider), New UIPropertyMetadata(0.0))
    Public Shared ReadOnly UpperValueProperty As DependencyProperty = DependencyProperty.Register("UpperValue", GetType(Double), GetType(RangeSlider), New UIPropertyMetadata(0.0))
    Public Shared ReadOnly MaximumProperty As DependencyProperty = DependencyProperty.Register("Maximum", GetType(Double), GetType(RangeSlider), New UIPropertyMetadata(1.0))

    Public Shared ReadOnly IntervallProperty As DependencyProperty = DependencyProperty.Register("Intervall", GetType(Integer), GetType(RangeSlider), New UIPropertyMetadata())

    Public Property Minimum As Double
        Get
            Return CDbl(GetValue(MinimumProperty))
        End Get
        Set(value As Double)
            SetValue(MinimumProperty, value)
        End Set
    End Property
    Public Property LowerValue As Double
        Get
            Return CDbl(GetValue(LowerValueProperty))
        End Get
        Set(value As Double)
            SetValue(LowerValueProperty, value)
            Propertychange("LowerValue")
        End Set
    End Property
    Public Property UpperValue As Double
        Get
            Return CDbl(GetValue(UpperValueProperty))
        End Get
        Set(value As Double)
            SetValue(UpperValueProperty, value)
        End Set
    End Property
    Public Property Maximum As Double
        Get
            Return CDbl(GetValue(MaximumProperty))
        End Get
        Set(value As Double)
            SetValue(MaximumProperty, value)
        End Set
    End Property
    Public Property Intervall As Integer
        Get
            Return Convert.ToInt32(GetValue(IntervallProperty))
        End Get
        Set(value As Integer)

        End Set
    End Property


    Private Sub LowerSlider_ValueChanged(sender As System.Object, e As System.Windows.RoutedPropertyChangedEventArgs(Of System.Double)) Handles LowerSlider.ValueChanged
        UpperSlider.Value = Math.Max(UpperSlider.Value, LowerSlider.Value)

    End Sub

    Private Sub UpperSlider_ValueChanged(sender As System.Object, e As System.Windows.RoutedPropertyChangedEventArgs(Of System.Double)) Handles UpperSlider.ValueChanged
        LowerSlider.Value = Math.Min(UpperSlider.Value, LowerSlider.Value)

    End Sub

    Public Event PropertyChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged

    Private Sub Propertychange(ByVal Name As String)
        RaiseEvent PropertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(Name))
    End Sub
End Class
22.01.2015 - 12:13 Uhr

Ich komm nicht mal in meinen Converter, warum nur nicht? 😕


<local:RangeSlider x:Name="mySlider" VerticalAlignment="Center" Minimum="0" Maximum="86399" LowerValue="{Binding Von, Converter={StaticResource IntegerToHourConverter}}"/>
22.01.2015 - 11:53 Uhr

Hallo Lars Schmitt,

versuch ich auch schon die ganze zeit leider funktioniert das irgendwie nicht, ich muss dazu sagen mein Slider ist ein eigenes UserControl muss man beim Binden an Dependency Properties irgendwas beachten?

Grüße

22.01.2015 - 10:26 Uhr

Hallo Liebe Community,

ich brauche wieder mal eure Hilfe!

Ich hab folgendes Problem : Ich muss auf eine Textbox einen Wert Binden.

Nur muss gleichzeitig die Textbox TwoWay auf einen Slider gebunden sein.

So dass die Textbox wenn vorhanden einen Startwert bekommt (aus der Datenbank) und dieser automatisch auf den Slider gebunden wird. Sich aber auch ändert wenn er auf dem Slider geändert wird.

Hab aktuell schon paar Sachen ausprobiert aber komme nicht zu einem Erfolg, ich google jetzt weiter eventuell hat ja jemand von euch Erfahrung damit. Geht das überhaupt?

Grüße

15.01.2015 - 11:31 Uhr

Nein es sollen solche Teilstriche selber gezeichnet werden zu einem vorgegebenen Intervall was sich nur zwischen Von und Bis befindet 😕

15.01.2015 - 10:54 Uhr

Hat jemand eine Idee wie ich vom Thumb des Sliders die exakte Position bekomme?

15.01.2015 - 07:07 Uhr

Hallo MrSparkle,

also folgendes : Ich habe mir dieses Steuerelement gebaut den RangeSlider jetzt soll folgende funktionalität hinzukommen.

Wenn eine Zeitspanne gegeben ist (Von - Bis) und dazu ein Intervall wie oft dieser Dienst (Von - Bis) in diesem Zeitraum ausgeführt werden soll, soll ermittelt werden wie oft dieses Intervall in diese Zeitspanne hinein passt, um dann auf der TimeLine zwischen den Abständen (Von - Bis) das Intervall exakt auf der TimeLine zu platzieren

Beispiel : 5 Uhr - 6 Uhr (Intervall 5 Minuten) 5:05 Strich, 5:10 Strich, 5:15 Streich usw.

14.01.2015 - 13:45 Uhr

Hallo Liebe Community,

ich hab es jetzt geschafft einen funktionierenden RangeSlider auf die Beine zu stellen.

Meine Frage an dieser Stelle wie kann ich am besten das umsetzen was im Bild zu sehen ist.

Man kann Von und Bis einstellen sowie ein Intervall wie oft das ganze in diesem Zeitraum erfüllt werden soll.

Und dann soll dieses Intervall in dem Bereich Von und Bis dargestellt werden.

D.h. es soll automatisch z.B. solche Striche wie im Bild erstellt werden anhand der Zeitspanne die zwischen Von und Bis gegeben ist.

Diese Striche müssen gleichzeitig auch noch an die echten Uhrzeiten platziert werden die auf dem RangeSlider gegeben ist.

Hat jemand eine Idee? Mir fällt da leider garnichts zu ein 😕

Grüße

14.01.2015 - 13:31 Uhr

Hab das Beispiel aus dem Link mal für VB.net umgesetzt.

Falls jemand nochmal darüber stolpert. > ERLEDIGT <

<UserControl x:Class="RangeSlider"
             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" 
             mc:Ignorable="d" 
             d:DesignHeight="20" d:DesignWidth="300"     
             x:Name="root">

    <UserControl.Resources>

        <LinearGradientBrush x:Key="SliderThumbGradient" StartPoint="0,0" EndPoint="0,1">
            <GradientStop Offset="0" Color="#f7f7f7"/>
            <GradientStop Offset="1" Color="#bcbcbc"/>
        </LinearGradientBrush>

        <Style x:Key="SliderThumbStyle" TargetType="{x:Type Thumb}">
            <Setter Property="SnapsToDevicePixels" Value="true"/>
            <Setter Property="OverridesDefaultStyle" Value="true"/>
            <Setter Property="Height" Value="14"/>
            <Setter Property="Width" Value="14"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Thumb}">
                        <Ellipse 
      Name="Ellipse" 
      Fill="{DynamicResource SliderThumbGradient}"
      Stroke="#404040"
      StrokeThickness="1" />
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter TargetName="Ellipse" Property="Fill" Value="#808080"/>
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter TargetName="Ellipse" Property="Fill" Value="#EEEEEE"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

        <ControlTemplate x:Key="simpleSlider" TargetType="{x:Type Slider}">
            <Border SnapsToDevicePixels="true" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto" MinHeight="{TemplateBinding MinHeight}"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>

                    <Rectangle x:Name="PART_SelectionRange"/>

                    <Track x:Name="PART_Track" Grid.Row="1">
                        <Track.Thumb>
                            <Thumb x:Name="Thumb" Style="{StaticResource SliderThumbStyle}"/>
                        </Track.Thumb>
                    </Track>
                </Grid>
            </Border>
        </ControlTemplate>

    </UserControl.Resources>
    <Grid VerticalAlignment="Top">
        
            <Border BorderThickness="0,1,0,0" BorderBrush="Black" VerticalAlignment="Center" Height="1" 
                Margin="5,0,5,0" Grid.ColumnSpan="25"/>
        
                <Slider x:Name="LowerSlider"
                Minimum="{Binding ElementName=root, Path=Minimum}"
                Maximum="{Binding ElementName=root, Path=Maximum}"
                Value="{Binding ElementName=root, Path=LowerValue, Mode=TwoWay}"
                Template="{StaticResource simpleSlider}"
                Margin="0,0,10,0" ToolTip="Von" VerticalAlignment="Center"
                />

        <Slider x:Name="UpperSlider"
                Minimum="{Binding ElementName=root, Path=Minimum}"
                Maximum="{Binding ElementName=root, Path=Maximum}"
                Value="{Binding ElementName=root, Path=UpperValue, Mode=TwoWay}"
                Template="{StaticResource simpleSlider}"
                Margin="10,0,0,0" ToolTip="Bis" VerticalAlignment="Center"
                />
    </Grid>
</UserControl>

Partial Public Class RangeSlider
    Inherits UserControl

    Public Sub New()

        ' Dieser Aufruf ist für den Designer erforderlich.
        InitializeComponent()

        ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.

    End Sub

    Public Shared ReadOnly MinimumProperty As DependencyProperty = DependencyProperty.Register("Minimum", GetType(Double), GetType(RangeSlider), New UIPropertyMetadata(0.0))
    Public Shared ReadOnly LowerValueProperty As DependencyProperty = DependencyProperty.Register("LowerValue", GetType(Double), GetType(RangeSlider), New UIPropertyMetadata(0.0))
    Public Shared ReadOnly UpperValueProperty As DependencyProperty = DependencyProperty.Register("UpperValue", GetType(Double), GetType(RangeSlider), New UIPropertyMetadata(0.0))
    Public Shared ReadOnly MaximumProperty As DependencyProperty = DependencyProperty.Register("Maximum", GetType(Double), GetType(RangeSlider), New UIPropertyMetadata(1.0))

    Public Property Minimum As Double
        Get
            Return CDbl(GetValue(MinimumProperty))
        End Get
        Set(value As Double)
            SetValue(MinimumProperty, value)
        End Set
    End Property
    Public Property LowerValue As Double
        Get
            Return CDbl(GetValue(LowerValueProperty))
        End Get
        Set(value As Double)
            SetValue(LowerValueProperty, value)
        End Set
    End Property
    Public Property UpperValue As Double
        Get
            Return CDbl(GetValue(UpperValueProperty))
        End Get
        Set(value As Double)
            SetValue(UpperValueProperty, value)
        End Set
    End Property
    Public Property Maximum As Double
        Get
            Return CDbl(GetValue(MaximumProperty))
        End Get
        Set(value As Double)
            SetValue(MaximumProperty, value)
        End Set
    End Property

    Private Sub LowerSlider_ValueChanged(sender As System.Object, e As System.Windows.RoutedPropertyChangedEventArgs(Of System.Double)) Handles LowerSlider.ValueChanged
        UpperSlider.Value = Math.Max(UpperSlider.Value, LowerSlider.Value)
    End Sub

    Private Sub UpperSlider_ValueChanged(sender As System.Object, e As System.Windows.RoutedPropertyChangedEventArgs(Of System.Double)) Handles UpperSlider.ValueChanged
        LowerSlider.Value = Math.Min(UpperSlider.Value, LowerSlider.Value)
    End Sub
End Class
12.01.2015 - 07:53 Uhr

Kann mir vllt jemand auf die Sprünge helfen? Ich bekomme durch das Beispiel leider den RangeSlider nicht erstellt bzw. bei meinem Versuch kann die Instanz nicht erstellt werden.

Hab versucht das Beispiel in VB.NET umzuschreiben.

Grüße