Gude zusammen,
an einem Institut von der Uni wurde ich gerade mit folgendem Problem betraut:
Für teils mehrwöchige Versuchsreihen werden von einer Software Messdaten aufgenommen und in eine CSV-Datei geschrieben. Damit die Leute sich die bisherigen Daten noch während des Versuchs bereits betrachten und analysieren können, würden sie ganz gerne vor Versuchsabschluss immermal mit der Datei arbeiten. Um das Programm nicht zu nerven, war die Idee, die Ausgabedatei bei Bedarf zu kopieren um dann damit zu arbeiten.
Das auftretende Problem ist naheliegend: Während die mitunter recht große Datei kopiert wird, versucht das Messprogramm reinzuschreiben und stürzt ab. Die neue Idee wäre jetzt, dass man die Datei immer wieder versucht zu öffnen, wenn sie gerade frei ist, wird der neue Text kopiert. Ansonsten wird in einer Dauerschleife gewartet bis die Datei frei ist bzw. neue Daten enthält.
Daher also meine Frage: Gibt es mit C# eine Möglichkeit in einer Datei zu lesen, ohne dass der Schreibzugriff gesperrt wird?
Danke!
Servus zusammen,
Ich brauche für ein HiWi-Projekt an der Uni einen Algorithmus, um eine Trendlinie zu berechnen. Die Funktion muss f(x)=-x^(1/n) sein, wobei n zu bestimmen ist.
Mit google schien mir der Begriff für Excel reserviert zu sein. Unter Anderem bin ich auf die Methode der Kleinsten Quadrate gestoßen, allerdings bin ich nicht ganz sicher, ob das für mich hier zielführend ist.
Gibt es irgendeine Standard-Vorgehensweise für so etwas? Bzw. gibt es ein oder ein paar Stichwörter mit denen ich weiterrecherchieren sollte?
Herzlichen Dank
DiscMaster
verwendetes Datenbanksystem: SQL Server 20xx
Liebe Community,
ich suche eine Möglichkeit einen Windows Service aus T-SQL anzusprechen. Welcher SQL Server das genau ist, weiß ich leider nicht genau, aber mindestens 2000, ich glaube aber 2008 - ich bekomme momentan keine genaueren Informationen.
Zum Hintergrund: Es geht hierbei um eine Warenwirtschaftssoftware, die unter anderem eine Möglichkeit zur Kartenzahlung bieten soll. Die Schnittstelle zu schaffen (Computer - Kartenterminal) war meine Aufgabe, die ich soweit auch erledigen konnte. Aus verschiedenen Gründen, ist es aber wenig sinnvoll jedesmal über einen shell-Aufruf eine exe auszuführen, die dann die entsprechenden Operationen am Terminal ausführt. Das könnte u.U. zu Inkonsitenzen führen, weil manche Operationen mehrere Rückmeldungen und entsprechende weitere Befehle brauchen.
Daher war meine Überlegung, die Schnittstelle in einen Windows-Service zu packen, der dann irgendwie angesprochen werden muss. Nun habe ich ein wenig recherchiert und wie es aussieht ist dafür ein gängiges Verfahren die Nutzung von Named Pipes. Allerdings finde ich finde mit Google keine Möglichkeit, wie man aus T-SQL eine Pipe zum Windows Service herstellen kann, nur immer andersrum.
Wie dem auch sei, kann mir jemand eine Möglichkeit für die Bidirektionale Kommunikation mit einem Windows Service ausgehend von T-SQL nennen?
Vielen Dank
discmaster
Ich habe das Problem lösen können.
Generell hilfreich: On-line CRC calculation and free library
Ich habe die ganze Zeit schweigend angenommen, dass ich mit CCITT XModem richtig fahre. Zufällig habe ich gemerkt, dass ich (offenbar) mit CCITT Kermit korrekt gewesen wäre. Das findet sich im o.g. Link.
(Fürs Verständnis: In der vorher erwähnten Dokumentation heißt es das die beiden CRC-Oktette vertauscht werden, sprich wenn CRC=1FF5 ist, dann wird F51F übertragen. Und genau das findet sich, wenn man auf o.g. Link bei CCITT Kermit nachsieht)
Gruß
DiscMaster
Liebe Community
ich brauche für eine Serielle Verbindung eine CRC-Checksum zu berechnen, für die ich nach der Dokumentation folgende Vorgabe habe:
Vorweg: Der Aufbau eines Kommandos sieht wie folgt aus:
DLE | STX | <Nachricht> | DLE | ETX | CRC
wobei: DLE = 10, STX = 02, ETX = 03
Die CRC-Prüfsumme wird nach CCITT (x16+x12+x^5+1) mit dem Initialwert 0 über die reine Nachricht (nach dem DLE STX) gebildet. [Die DLE Verdopplung in der <Nachricht> wird hierbei nicht berücksichtigt,]* aber das Endezeichen ETX ist im CRC enthalten!
Beispiel:10 02 80 00 00 10 03 80 00 00 03 => CRC = 1FF5
*DLE-Verdopplung wird eingesetzt wenn 0x10 innerhalb der Nachricht erscheint, aber kein DLE ist - es wird sozusagen escaped, sollte im Beispiel aber nicht weiter relevant sein.
<Nachricht> ist also 80 00 00.
Mit dem ETX am Schluss berechne ich die CRC-Checksum also mit der zweiten Zeile im obigen Beispiel.
Wenn ich das wie auf Wikipedia beschrieben berechne, erhalte ich allerdings CRC=ED5B. Unter Einsatz dieses Algorithmus (mit einigen Anpassungen der Datentypen (ushort => uint) und des Polynoms (69665)) bekomme ich das gleiche Ergebnis.
Wenn ich das Kommando mit "meiner" Checksum übertrage, bekomme ich allerdings eine Fehler-Antwort vom Gerät. Mit der Checksum des Beispiels nicht - klar.
Allerdings bin ich mit meinem Latein am Ende. Kann mir jemand sagen wo mein Problem sein könnte?
Bedankt!
DiscMaster
Liebe Community,
gegeben sei folgende Struktur (Pseudo-XAML):
<DataTemplate1>
<Button />
</DataTemplate1>
<DataTemplate2>
<TextBox />
</DataTemplate2>
<Control>
<ControlTemplate>
<TextBlock />
<ContentPresenter />
</ControlTemplate>
</Control>
Jetzt habe ich ich folgendes vor: Es geht darum das ich ein Fenster aufbauen will, durch das ich mich durchtabben kann und einige Controls beim erhalten des Focus in einen Bearbeitungsmodus wechseln (Der ContentPresenter nutzt je nach Typ es Contents das DataTemplate1 oder DataTemplate2).
Dazu habe ich ein Control entwickelt, das der obigen Struktur genügt. Mit einem Trigger auf IsFocused=true zeige ich den ContentPresenter an und den TextBlock lass ich verschwinden. Das funktioniert soweit.
Jetzt möchte ich allerdings, dass der KeyboardFocus in das DataTemplate, sprich auf den Button bzw. die TextBox gesetzt wird. Ich habe einige Recherchen bzgl. des FocusScope angestellt und habe auch annähernd das gewünschte Verhalten erreicht.
Wenn ich jetzt allerdings auf das Control klicke, bzw. mich dahin tabbe, dann hat zunächst das Control selbst den Focus, erst mit einem weiteren Tab komme ich zum gewünschten "Ziel-Control". Und diesen Zwischenschritt würde ich jetzt gerne überspringen. Meine Hoffnung ist, das ich das allein auf XAML-Seite lösen kann. Alternativ habe ich überlegt mit einem Behavior den nächsthöheren FocusScope zu suchen und bei desselben den Focus zu klauen.
Meine Frage: Wie Löse ich das ganze jetzt möglichst elegant?
Danke & Gruß
DiscMaster
ich weiß nicht, was du mit "in einer RichTextBox ein eigenes Control Platzieren" meinst
Naja, ich meine ins innenliegende FlowDocument ein InlineUIContainer einfügen der wiederum mein Control beinhaltet.
Wie groß sind denn die Texte, die du anzeigen willst?
Das tritt schon auf, wenn nichts in der RTB steht und ich mit dem Schreiben einfach so anfange.
Wonach suche ich denn bei dieser Alternative? Was ich brauche ist eine Textbox, die einfach nur einige Sätze anzeigt, und ich dann interaktive Felder in den Fließtext einbauen kann.
Das ganze ist für ein Programm, mit dem ich Phrasen vorgeben kann und dann eben bestimmte Stellen variabel sind - wie die Snippets in Visual Studio. Nur das ich damit dann eben kein Code sondern Protokolle in der Vereinssitzung geschrieben werden. Diese Protokolle bestehen immer aus wiederkehrenden Phrasen. Z.B.: "Herr NAME stellt Antrag auf ..." Und NAME wäre dann eben gelb hinterlegt und wenn ich darauf klicke geht ein Popup auf wo ich angeben kann, um was für einen Typ es sich bei dieser Variable handelt, wie sie heißt etc.
Danke für deine Mühe!
Liebe Community,
ich glaube nicht das ich der erste bin der sich mit dieser Frage rumschlägt, aber ich finde keine richtige Antwort dazu....
Ich hab eine WPF-Applikation und möchte jetzt in einer RichTextBox ein eigenes Control Platzieren, einen erweiterten ToggleButton. Allerdings habe ich das Problem, dass die RichTextBox in WPF schon von Hause auf sehr lahm ist. Also selbst wenn ich keine großen Experimente habe, merkt man schon eine kleine Verzögerung vom Tastenanschlag bis zum Erscheinen des Zeichens. Gibt es da irgendwelche Tricks, die man beachten muss? Ich bin nicht so recht fündig geworden.
Danke!
Bingo!
Das Problem ist nicht der ContentPresenter oder sonst ein Control - sondern der Ort wo ich es platziert habe. Nämlich im Header einer GroupBox.
So ganz interpretieren kann ich das zwar noch nicht, aber es sieht ganz danach aus, als würde der Border der GroupBox den HitTest abgreifen - versteh zwar nicht wieso, denn der müsste ja eigentlich darunter liegen. Aber was solls.
Danke für eure Unterstützung!
Ich werd bekloppt...
Gibt kein Beispiel - denn ich habe eins erstellt, das hat das Problem nicht mehr. Dann habe ich den Quelltext von meinem Problemkind reinkopiert - jetzt hab ich das Control ohne Fehlverhalten... ist das zu fassen?
Dann werd ich mich jetzt mal auf die Suche nach dem kleinen aber feinen Unterschied machen - irgendwo muss ne kleine Codezeile fehlen, die des Bösen Ursprungs ist.
Ich meld mich wenn ich was finde.
Ja, das ist ja gerade das was mich so an den Wahnsinn treibt! Wenn ich ein Button-ControlTemplate erstelle, dann hab ich das Problem nicht - wenn ich allerdings eine Klasse von Button ableite, und dafür das Template erstelle, dann taucht besagtes Problem auf.
Grad andersrum will ich das aber:
<ControlTemplate>
<Border ...>
<ContentPresenter .... />
</Border>
</ControlTemplate>
Im Template soll jetz der trigger für IsMouseOver=true anspringen - das geh auch, solange ich explizit auf dem Border bin mit dem Cursor, komm ich aber auf den Text im ContentPresenter dann greift der trigger nicht.
Das bedeutet im Endeffekt, wenn ich mit der Maus den Button quer durchfahre, dann flimmert er (IsMouseOver ändert die Hintergrundfarbe des Borders).
Und jetzt hab ich eben gelesen, dass mit IsHitTestVisible=false für den ContentPresenter das Problem umgangen werden soll - aber das passiert eben nicht. Auch wenn ich statt des ContentPresenters andere Controls einsetze, geht das nicht...
Ich wundere mich, ob ich der einzige bin, der das Problem so hat...
Liebe Community,
lang lang ist's her....
Ich versuch mir gerade ein UserControl basierend auf einem Button zu gestalten. Das Problem hatte ich schon öfter und hab früher oder später immer davor kapituliert. Allerdings ist es mal wieder Zeit für etwas Kampfgeist. Wie auch immer, das Problem ist das gleiche wie hier schon beschrieben. Allerdings hab ich halt kein Label sondern eben einen ContentPresenter. Das Template sieht dann ungefähr so aus (ich habe die Brushes und BorderThickness der Übersichtlichkeithalber rausgenommen):
<Border x:Name="border1">
<ContentPresenter x:Name="contentPresenter" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" IsHitTestVisible="False"/>
</Border>
Das lustige ist, ich habe fast die gleiche Konstruktion noch als Button-ControlTemplate - da taucht das Problem nicht auf.
Wenn ich jetzt dem eigenen UserControl die Eigenschaft Content="Hello World!" gebe, dann kann ich mit der Maus auf den Button "fahren" und dann greift der IsMouseOver-Trigger zunächst wie er soll. Wenn ich aber auf einem Pixel komme, der dem ContentPresenter "gehört", dann gilt für das UserControl.IsMouseOver=false.
Wie gesagt ein "normales" Button-ControlTemplate zeigt dieses Verhalten nicht. Um die Worte meines Vorredners (siehe obigen Link) zu benutzen, der ContentPresenter ist nicht "durchlässig". Allerdings behebt IsHitTestVisible="false" das Problem nicht.
Danke für jede Hilfe, das ist allmählich wirklich frustrierend.
Sers zusammen,
ich versuche gerade ein Add-In für Outlook 2010 zu entwickeln. Ich arbeite mit VSTO und VS2010, das mit dem Ribbon usw. hab ich auch soweit gerissen.
Aber jetzt komm ich nicht mehr weiter und weiß auch nicht mehr so recht wonach ich googlen soll - folgendes Szenario:*ich klicke auf einen Button im Ribbon *ein Fenster soll aufgehen wo ich meinen Namen eingeben kann *ich klicke in besagtem Fenster auf OK *Per MesseageBox wird dann "Hallo, <Name>" ausgegeben.
Nur ich würde dafür ganz gerne ein WPF-Window einsetzen, kann das aber nicht zum Outlook-Add-In-Projekt hinzufügen. Ich bekomm nur ein Windows-Form angeboten, das wollt ich aber nicht.
Also ob das nun ein eigenes Fenster ist, oder irgendwas fertiges aus Outlook ist mir eigentlich egal, aber ich finde keine Möglichkeit das zu machen...?
Ich hab grade versucht herauszufinden was es mit diesen "Outlook Form Regions" auf sich hat, aber ich glaube das ist nicht das was ich suche...
Bin für jede Hilfe dankbar!
DiscMaster
Offengestanden verstehe ich dein Problem nicht so hundertprozentig, aber aus dem Satz
da ich direkt vor dem Serilisieren noch bissl was machen muss in der Klasse
meine ich zu entnehmen, dass du deine Basisklasse ISerializable implementieren sollte. Dadurch kannst du erstens deine Daten gezielter serialisieren und du hast die Möglichkeit vorher noch deine "Arbeit" zu erledigen.
Mit dem OnSerializing bin ich leider nicht vertraut...
Auch nen guten Abend.
So wie ich dich verstehe, willst du einfach ne Textdatei haben, in der du den Pfad zu deinem Ordner reinschreibst, beim Programmstart wird die dann ausgelesen und der Pfad dann zum Speichern deiner Daten verwendet - richtig?
Wenn das so ist, würde ich einfach an entsprechender Stelle die Datein zu Öffnen versuchen (erst prüfen ob sie existiert). Wenn ein gültiger Pfad drin steht, kannste den weiterverwenden.
Sag bescheid wenn du Quelltext brauchst.
Gruß DiscMaster
Edit: talla hat allerdings die sehr viel elegantere Lösung.
Mensch natürlich! Ich hatte mich schon gewundert, weil ich das KeyDown behandelt hatte aber da ist die CheckBox ja vor der TextBox dran...
Danke für den leichten Stoß auf den Hinterkopf!
Hm...das mit dem +/- stimmt... Ist mir nie aufgefallen.
Ich hab das jetz so gelöst, das ich die CheckBox in das StackPanel gepackt habe und damit liegen die Textboxen nicht mehr in der CheckBox sondern auf gleicher ebene im StackPanel.
Danke für den Hinweis mit dem +/-
Hallo zusammen,
ich bin hier gerade auf ein komisches Problem gestoßen: Die WPF CheckBox zeigt ein sehr seltsames Verhalten in folgendem Markup:
<CheckBox Name="cbxReplace" >
<StackPanel Orientation="Horizontal">
<TextBlock Text="Replace:" Width="70" />
<TextBox Name="txtReplcement" Width="30" VerticalAlignment="Center" IsEnabled="{Binding IsChecked, ElementName=cbxReplace}" />
<TextBlock Text="by" Margin="6,0" />
<TextBox Name="txtReplaceBy" Width="30" VerticalAlignment="Center" IsEnabled="{Binding IsChecked, ElementName=cbxReplace}" />
</StackPanel>
</CheckBox>
Im Falle von cbxReplace.IsChecked sind die beiden Textboxen enabled. Und jetzt das Problem: Wenn ich in eine Checkbox was schreiben will, dann geht das problemlos solange ich nicht die '-' bzw. '_' Taste benutze, also die links neben RShift. Gleiches gilt für die Minus-Taste vom Nummernblock. Wenn ich also eine dieser Tasten benutze, wird cbxReplace.IsChecked auf false gesetzt... es gibt kein code-behind zu diesem Stück Markup, genausowenig habe ich Keybindings eingesetzt...
EDIT: Ich habe gerade zum Testen dieses Stück Markup noch in ein neues WPF-Projekt /-Fenster eingesetzt ohne weiteren Content und code-behind. Das Verhalten blieb gleich.
Kann mir dazu jemand weiterhelfen?
Dankeschön, DiscMaster
kleinlaut: ich hab einen fehler in der rekursion gehabt...asche auf mein haupt.
Sers zusammen,
ich brauche einen effizienten Stingvergleich Algorithmus.
Hintergrund ist folgender:
Ich lade ab einem bestimmten Ordner in meinem Dateisystem die Hierarchie. Unterm Strich hat die Struktur dann grob übern Daumen 2000 Dateien und Ordner. Jetzt wollte ich eine Suchfunktion implementieren die einfach wie in Visual Studio 2010 über den Properties die Eingabe entgegennimmt und alle nich betroffenen Elemente ausblendet.
Mein Vorgehen ist im Moment wie folgt:
Ich gehe rekursiv über alle Hierarchie-Knoten und -Enden und prüfe den Datei- bzw. Ordnernamen mit string.Contains(searchtext);
Das dauert aber sehr sehr lange bis der fertig gesucht hat. Nun ist mir geläufig das Stringverarbeitung in großen Mengen immer sone Sache ist, aber es gibt doch mit Sicherheit eine Lösung oder?
Wär super wenn mir jemand weiterhelfen könnte.
Danke.
DiscMaster
Sers,
Google einfach nach "ContextMenu Binding".
Darauf hätt ich auch so kommen können, aber mancher Tritt tut eben not, insofern Danke 😃
Das Problem ist der NameScope, den man aber ändern kann (im Konstruktor, nach dem InitializeComponent()). Man holt sich zunächst die Resource und ändert dann ihren namescope:
ContextMenu cxt = (ContextMenu)this.FindResource("myContextMenu");
NameScope.SetNameScope(cxt, NameScope.GetNameScope(this));
Quelle:stackoverflow.com
DiscMaster
Sers zusammen,
ich habe ein TreeView dessen TreeViewItems über ein DataTemplate designt werden. Die Objekte die jeweils dahinter liegen haben eine Eigenschaft Type.
Jetzt möchte ich ein Kontextmenü einsetzen, das bestimmte MenuItems entsprechend diesem Type enabled oder disabled, je nachdem welches TreeViewItem ausgewählt ist. Das Kontextmenü habe ich in den TreeView.Resources angelegt:
<ContextMenu x:Key="ItmContextMenu" MinWidth="150" >
<MenuItem Header="foobar" IsEnabled="{Binding ElementName=trvTree, Path=SelectedItem, Converter={StaticResource SpecificConverterForNodes}}"/>
</ContextMenu>
Die Convert-Routine des Converters:
public object Convert(object value, [...])
{
ModelNode node = value as ModelNode;
return node.Type == NodeType.Foo;
}
(ConvertBack verwende ich nicht.)
Der Converter wird dummerweiße garnicht erst aufgerufen, und foobar-MenuItem wird nicht disabled oder enabled - warum? Ich habe alternativ versucht das ContextMenu in den Window.Resources abzulegen, ohne erfolg. Ich habe Spaßeshalber ein Button.IsEnabled nach gleicher Weise gebunden, da hats geklappt, aber warum nich im ContextMenu bzw. beim MenuItem?
Danke,
DiscMaster
Dafür musst im ItemContainerStyle das Template überschreiben.
Das Template im ItemContainerStyle is Rille.
Also, ich bin in der Zwischenzeit öfters auf das Problem gestoßen, und dachte ich poste einfach mal des Rätsels Lösung:
<TreeView [....]>
<TreeView.Resources>
<!-- für den Hintergrund -->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
<!-- für den Text -->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
</TreeView.Resources>
</TreeView>
Also ich hab mich jetz mit der Behavior-Materie beschäftigt, aber das scheint alles darauf hinauszulaufen, dass ich mir Expression Blend anschaffen muss, weil ich sonst nicht von Behavior<T> ableiten kann, liege ich da richtig?
Expression Blend hab ich aber nicht, und irgendeine abgespeckte Freeware ist mir nicht geläufig... ist mir dennoch zu helfen?
Danke
DiscMaster
Yoah, grundsätzlich nachvollziehbar und verständlich. Aber allein auf XAML-Seite kann ich das Problem nich lösen?
Sers zusammen,
ich kann mir nicht vorstellen das dieses Thema noch nicht diskutiert wurde, aber ich habe keine Antwort dazu gefunden, deswegen erzähl ich euch mal wieder meine Sorgen:
ListView hat Items die über ein DataTemplate layoutet sind. Wenn das ListViewItem selected ist, wird ein Rechteck im Hintergrund anders gefärbt, so weit so gut. Jetzt habe ich in dem Template noch einen Radio-Button und eine Textbox. Wenn ich auf eins der beiden klicke erhält das jeweilige Control den Focus, das ListViewItem wird jedoch nicht selected. Wie löse ich das?
Danke,
DiscMaster.
Na, wenns nich klappt kann man noch bissl probieren, aber jetz hab ich den eingangs gefragten Denkansatz, und dafür bin ich schon sehr dankbar!
der satz irritiert mich bisschen "die lines an ein contentcontrol binden" - du meinst als children hinzufügen oder richtig binden? wenn letzteres, würde mich interessieren, wie. aber ich glaube du meinst ersteres, das würde sinn ergeben 😉
jop, das klingt schonmal gut.
Was das Gitternetz betrifft: zeichnest du die einzelnen Gitternetzlinien von Hand, oder legst du lauter Lines einen Container?
Sers zusammen,
wie kann ich ein X-Y-Diagramm mit Skalierung und zugehörigen Teilstrichen in WPF am besten realisieren?
Die Teilstriche und die Achsenskalierung muss flexibel sein, die abstände veränderbar etc...
Ich dachte da an eine ListView, deren ItemTemplate ein einfacher strich ist und füge dann so viele items hinzu bis ich die achse so hab wie ich sie haben will... aber das wäre ziemlich mühsam, weil ich dan alles von hand berechnen müsste, z.B. wie viele striche ich brauche, die abstände dazwischen etc.
Ich brauch (erstmal) keinen Code, nur ein paar denkansätze wie man an so ein problem rangeht.
Danke, DiscMaster
...und hier ein Premium-Danke 😉
Wie siehts mit deinem Tool aus, exisitiert das mittlerweile? Ich hätte Interesse.
Was das Bild auf und Bild ab angeht: PgUp und PgDn
DiscMaster
Hallo zusammen,
ich wollte mal fragen ob ich irgendwo etwas überlesen habe oder ob es eine möglichkeit gibt mit DirectSound die Lautsprecher einzeln anzusprechen?
Ich generiere mir selber Frequenzen und gebe die über die Lautsprecher wieder. Nach etwas experimentieren habe ich festgestellt das ich (z.B. nur in jedes zweite Byte) etwas in den Buffer schreiben kann, und das dann nur auf einem Lautsprecher wiedergegeben wird. Jetzt dachte ich, das ich das ganze auch mit dem ganzen 5.1 System machen kann, wenn ich die Channels im WaveFormat = 6 setze und dann eben jedes sechste Byte schreibe. Aber da haut mir DirectX dann eine ArgumentException um die Ohren, vonwegen der Wert liege außerhalb des erwarteten Bereichs.
Kann mir jmd sagen was ich falsch mach? Ich habe die SpeakersConfig auch entsprechend angepasst (erster Versuch Stereo => klappt, zweiter Versuch mit 5.1 => klappt nicht).
Bin für jede Hilfe dankbar.
DiscMaster
äh.... wieder mit trigger und so? (wenn nich, haste ma n codebeispiel?)
Yipee, langsam nimmt das alles Gestalt an, und ich hab gerade einiges dazugelernt... ABER: Die TreeViewItems sind nach wie vor blau hinterlegt wenn ich sie auswähle........ 😦
Erstmal herzlichen Dank für dein Bemühen!
Wenn ich dein Beispiel übertrage habe ich schonmal einiges erreicht. Allerdings bekomme ich jetzt keine Hierarchie mehr hin... Zweitens: Wenn ich von TreeViewItem ableite hab ich weder Image noch Text im Item - nur noch das Rectangle, ist also auch nicht ganz Ziel der Übung...
Durch das Ableiten vom TreeViewItem kannst Du die Items (insbesondere die Hintergrundfarbe) jetzt natürlich auch ohne das ganze drumherum wie gehabt per Style und Trigger setzen! Ich habe die Ableitung nur gemacht um die Propertie "Template " schnell zur Verfügung zu haben.. das würde man dann im Ernstfall wohl anders machen...
Wie implementiert man denn den Extremfall?
Yah, sowas in der richtung hatte ich mir vorhin dann auch überlegt, aber das wäre ein workaround das mit sicherheit auch schlichter zu lösen geht...
na jetzt mus ich doch irgendwie klar machen was er da verändern soll? deswegen eben der TargetName, weil das Property="Fill" könnte ja genauso zum TextBlock gehören... oder hab ich da was nicht richtig verstanden?
naja, ich will ja nich irgendwas ändern sondern wenn ein element ausgewählt wird, soll das schön hinterlegt werden, also nich so hässlich blau ohne rahmen sondern halt was weiß ich mit einem abgerundeten rechteck (Rectangle: itemBackground, letzte zeile im StackPanel im Template). Und ich dachte, wenn jetzt eben das item ausgewählt wird, dann soll das rectangle z.B. grün werden
Die Items kommen aus einer ObservableCollection.
Jetz hab ich allerdings nich nur die TreeViewItems ansich, sondern ich hab das bisschen Layoutet mit dem HierarchicalDataTemplate. Wenn ich das was du mir eben geschrieben hast und beim Setter noch den TargetName angebe, bekomme ich ne Exception, das das Style-Setter kein TargetName haben dürfen....
Hier mal mein TreeView:
<TreeView Margin="4,4,2,4" Name="trvPlaylistConfig" >
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding SubItems}">
<StackPanel Margin="2,1,2,2" Orientation="Horizontal">
<CheckBox Margin="0,0,2,0" IsChecked="{Binding IsChecked}" VerticalAlignment="Center"/>
<Image Source="{Binding Type, Converter={StaticResource NodeTypeConverter}}" VerticalAlignment="Center"/>
<TextBlock Margin="3,0,0,0" Text="{Binding Text}" VerticalAlignment="Center"/>
<Rectangle x:Name="itemBackground" Fill="Red" Margin="1,1,1,1"></Rectangle>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
Sers zusammen!
Ich bin auf der Suche nach einer Möglichkeit die SelectedItems eines TreeViews zu bearbeiten. Was ich mein ist, wenn ich ein TreeViewItem anklicke, wird das ganz billig blau hinterlegt. Sieht einfach nicht besonders toll aus (zumindest unter WinXP). Mich würde es jetzt interessieren ob und wie man das Aussehen der Selection bearbeiten kann.
Google hat mir nicht viel weiter geholfen. Allerdings habe ich ein Stückchen Markup gefunden, das vieleicht der richtige Ansatz ist, aber ich weiß damit nicht recht umzugehen...
<VisualStateManager.VisualStateGroups>
<VisualState x:Name="Selected"/>
</VisualStateManager.VisualStateGroups>
Ich weiß allerdings nich wie ich damit weitermachen muss (wenn überhaupt...)
Danke, DiscMaster.
naja, das ist aber in meinem fall nicht ganz so sinnvoll weil ich an dieser stelle noch nicht weiß ob der wert hinterher auch übernommen werden soll.....
nagut, sowas in der art dachte ich mir schon... jetzt ist nur die überlegung wie ich den Wert unter der Bindung verändern kann....? (Ich hoffe das habe ich bei dem Link jetzt nicht einfach übersehen)
Hallo zusammen,
wieder eins meiner Probleme die scheinbar noch nie diskutiert wurden...
Ich habe ein UserControl (Datei-Browser) bestehend aus einer TextBox die einen Datei- oder Ordnerpfad gekürzt ausgibt, und einen Button, der einen FileDialog öffnet. Ich habe dem Control ein Wrapper-Property verpasst, das da heißt SelectedPath. Das hält den absoluten Pfad zu der gekürzten Fassung aus der TextBox. Dem liegt ein DependendcyProperty zugrunde. Jetzt habe ich das alles so konstruiert, das wenn man in die TextBox klickt, der gekürzte Pfad durch den echten erstetzt wird, verliert sie dann den Focus wieder, wird der (neu eingegebene) Pfad wieder gekürzt. Das Control funktioniert bis hierhin einwandfrei.
Jetzt verwende ich das Control und Binde die SelectedPath-Eigenschaft an das SelectedItem einer ComboBox. Wenn ich die Auswahl in der ComboBox ändere, steht auch der richtige Pfad im Datei-Browser. Bekommt die TextBox allerdings den Focus und verliert ihn anschließend wieder, wird der FocusLost-Event gefeuert, und folgender Handler abgearbeitet:
string tmp = txtPath.Text;
if (mode == BrowseMode.Directory && Directory.Exists(tmp)) {
tmpPath = tmp;
dlgDirectory.SelectedPath = tmp;
}
else if (mode == BrowseMode.File && File.Exists(tmp)) {
tmpPath = tmp;
dlgFile.FileName = tmp;
}
SelectedPath = tmpPath;
(Die SelectedPath-Eigenschaft legt nur den Wert des DependendcyPropertys fest (SetValue(...)))
Ist dieses SetValue() ersteinmal aufgerufen worden (ich hab auch probiert es in obeingem Code zu machen, statt SelectedPath = ...), funktioniert die Datenbindung scheinbar nicht mehr, denn wenn ich jetzt die Auswahl in der ComboBox wieder ändere, dann passiert einfach ganix, der Text in der TextBox bleibt unverändert.
So, ich glaube das war ziemlich ausführlich und hoffe, das mir jemand weiter helfen kann.....
Gruß DiscMaster
BINGO!
Die DisplayMemberPath-Eigenschaft in der ComboBox hat bei mir gefehlt. Eingebunden - und etz gehts!
Ganz großes Dankeschön! (Endlich mal wieder ein Erfolgserlebnis 😉)
Gruß DiscMaster
Visual Studio 2008 Professional.... Tja, wenn das so ist, war das wohl wieder MS' Schlamperversion wie mein Ausbildungsleiter immer so schön sagt....
Guten Tag zusammen,
mich beschäftigt seit geraumer Zeit ein sehr nerviges Problem, das meinen Designer (WPF) sozusagen ausser Kraft setzt. Ich habe eine WPF-ControlLibrary erstellt und ein simples Control gebaut. In der Toolbox wähle ich dann "Elemente hinzufügen" und hol mir mein Control in die Toolbox. Dann ziehe ich es auf mein Window, dann gehe ich auf Verweise und lösche den automatisch erstellten Verweis auf die Assembly mit dem Control deren Namen komischerweiße aus kompletten relativen Pfad zu der DLL-Datei besteht und mit einem gelben Ausrufezeichen markiert wird ("Verweis nicht gefunden"). Dann füge ich den Verweis zu ebendieser DLL wieder hinzu (jetzt stimmt auch der Name), das gelbe Ausrufezeichen ist weg, und der Designer zeigt mein Control - bis hierhin funktioniert alles einwandfrei.
Jetzt kommts: Wenn ich einen cleanup mache oder VS08 neu starte, dann bekomme ich im Designer-Fenster keine Vorschau mehr sondern eine Fehlermeldung:
"Das Dokument enthält Fehler. Diese Fehler müssen behoben werden, bevor der Designer geladen werden kann. [...]".
Ich sehe mir also das Markup an, und sehe folgendes:
Ein Fehler beim Einbinden des Namespace:
xmlns:my="clr-namespace:WPFControls;assembly=WPFControls"
Die Assembly "WPFControls" wurde nicht gefunden. Alle Assemblyverweise müssen vorhanden sein, und das Projekt sowie alle referenzierten Assemblys müssen erstellt worden sein.
Und ein Fehler bei der Deklaration des Controls:
<my:TestControl Name="myCtrl" />
Der my:TestControl-Typ wurde nicht gefunden. Alle Assemblyverweise müssen vorhanden sein, und alle Assemblys, auf die verwiesen wird, müssen erstellt worden sein.
Taucht das Problem ersteinmal auf, kann ich es (scheinbar) nicht mehr lösen, auch nicht mit rebuild etc. Das komische ist: Ich kann die Anwendung einwandfrei starten, das Control macht alles das was es soll.
Google konnte mir viel über diese Fehlermeldung erzählen, allerdings hat nichts geholfen...deswegen fühle ich mich ziemlich allein mit diesem Problem, und hoffe mir kann trotzdem jemand helfen. Danke.
Gruß DiscMaster
hmmm, aber wie konntest du feststellen das das Problem ohne TwoWay-Bindung gelöst war? Denn der Wert der dem Angezeigten in der ComboBox zugrunde liegt wird ja dann gar nicht mehr verändert (oder hast du das dann "von Hand" gemacht?)