Laden...

Forenbeiträge von Tempelbauer Ingesamt 86 Beiträge

05.12.2013 - 17:14 Uhr

Bei jeder externen Bibliothek die ich nutze hab ich das Problem. Ich füge eine Assembly dem Projekt hinzu, möchte die WPF-Controls darin nutzen, aber zur Designtime findet Visual Studio die Controls nicht und ich hab ein ungültiges Markup, sowie Fehler in der Fehlerliste (s. Titel).

Kompilieren und Starten geht aber und das Control wird normal verwendet.

Ich würde gern wissen was der Grund dafür ist dass es bei mir jedesmal im Designer so ein Problem gibt. Ist das ein Problem der Komponente oder hab ich irgendwas nicht beachtet?

Ich mach mal ein Beispiel:

Ich hab mir das Extended WPF Toolkit (Community Edition) heruntergeladen von der Codeplex-Seite, im Solutionverzeichnis entpackt, dann die Xceed.WPF.Toolkit Assembly unter Verweise hinzugefügt, dann im XAML des Windows den Namespace hinzugefügt

xmlns:xwpft="http://schemas.xceed.com/wpf/xaml/toolkit"

und die Komponente benutzt:

 <xwpft:IntegerUpDown Minimum="2" Maximum="5" Value="{Binding Config.MinOperands}" />

Und da bemängelt er dass IntegerUpDown (zur Designtime) nicht gefunden werden kann. Lauffähig ist es aber.

Also, was hab ich da falsch gemacht? Wo liegt mein Problem?
Vielen Dank

04.05.2013 - 19:59 Uhr

Ich möchte einen moderneren Fenster-Look realisieren (ohne dicken Rand oder Titelleiste), so wie in Photoshop CS4 aufwärts, bzw. MS Office 2013.
Dazu habe ich folgende Einstellungen gesetzt:

<Window 
AllowTransparency="true"
ResizeMode="CanResize"
WindowStyle="None">
...
</Window>

Leider ists dann nicht mehr möglich mit der Maus die Fenstergröße zu ändern, wie man es gewohnt ist. Auch nicht wenn man BorderThickness des Window auf 1 setzt um so einen (flachen) Rand zu erzeugen.
CanResizeWithGrip funktioniert zwar, ist aber sehr unpraktisch, da man nur unten rechts skalieren kann.

Weiß jemand wie ich die Resize-Funktion ermögliche ohne einen fetten Fensterrand zu haben?

02.12.2012 - 12:43 Uhr

Nein, Geld werd ich für so eine Spielerei nicht ausgeben.
Notfalls muss man den Rechner von meinem Programm halt manuell starten und beenden. Automatisch wär hält schön gewesen.

Und Printserver geht eh nicht ohne noch einen Switch aufzustellen. Die einzige Netzwerkverbindung im Büro ist ein dLAN-Adapter mit einem einzigen RJ-45-Port. Und WLAN gibts keins.

01.12.2012 - 16:09 Uhr

Folgende Situation:
Möchte einen USB-Drucker am Büro-Rechner im Netzwerk freigeben, damit man auch an anderen Geräten (Notebook, etc) drucken kann. Allerdings muss logischerweise der Bürorechner an sein, damit das funktioniert, weil die Kommunikation nun mal über ihn läuft.
Daher würd ich gern ein Programm schreiben, dass ihn per WOL aus dem Schlaf holt und ihn danach wieder herunterfährt. Das schreiben eines solchen Programms ist nicht das Problem, nur ich weiß nicht, ob und wie ich mich in die Druckerwarteschlange einklinken kann? Optimalerweise sollte mein Programm automatisch aufgerufen werden, wenn jemand einen Druckauftrag an den (Offline)Drucker sendet. Das würde den Rechner hochfahren, die Warteschlange abarbeiten und dann wärs cool, wenn er den Shutdownbefehl sendet.

Gibts da ne Möglichkeit auf "Druckaufrag erhalten" bzw. "Warteschlange leer" eines bestimmten Druckers an seinem System zu reagieren?
Falls es .NET nicht ermöglicht, gehts denn über Interop?

28.09.2012 - 19:02 Uhr

Hi

Mein Programm soll sich verhalten wie die Gadgets der Windows Sidebar:

  • BottomMost: In der Z-order immer ganz unten
  • Kein Icon in der Taskbar
  • Bei Windows+D (Zeige Desktop-Befehl) muss es sichtbar bleiben

Die ersteren beiden Eigenschaften hab ich hinbekommen, aber letzteres will noch nicht.
Kann man sich irgendwie (per Interop) irgendwo in der WinAPI registrieren um informiert zu werden wenn der ShowDesktop-Befehl ausgeführt wird, um das eigene Fenster in der Z-order neu zu setzen (ich benutze dazu SetWindowPos mit HWND_BOTTOM)?

08.09.2012 - 12:04 Uhr

aahhh, jetzt fällts mir wieder ein...
das liegt daran, dass mein postbuilt-skript die generierte assembly via editbin modifiziert. das hat ich voll vergessen

danke

08.09.2012 - 08:00 Uhr

Hi,

ich verwende in meinem XAML eigene Controls. Deshalb habe ich einige Namespaces eingefügt, z.B.

<Window xmlns:vm="clr-namespace:RegEd.ViewModel"
xmlns:v="clr-namespace:RegEd.View" >
...
<v:RegView ... />
...
</Window>

das funktioniert auch soweit. Lässt sich alles kompilieren und ausführen und funktioniert wie es soll.

ABER: zur Designzeit (Im VisualStudio Designer) habe ich bei jedem Namespace, der auf die eigene Assembly verweist (also xmlns:v und xmlns:vm) Fehler z.B. > Fehlermeldung:

"Der CLR-Namespace wurde nicht definiert. Der CLR-Namespace-URI verweist auf einen Namespace, der nicht in der Assembly vorhanden ist" oder bei Controls > Fehlermeldung:
"Der v:GreyableImage-Typ wurde nicht gefunden. Alle Assemblyverweise müssen vorhanden sein und alle Assemblys auf die verwiesen wird müssen erstellt worden sein" .
Jetzt befindet sich aber dieser Typ in der eigenen Assembly (Tippfehler kann auch nicht sein, weil lässt sich ja ausführen). Warum findet er die nicht? Woran kann das liegen?
Ich hab vermutet, dass das durch die Signierung der Assembly kommt, aber wenn ich die in den Projekt-Einstellungen deaktiviere ändert sich nichts am Problem.

Das ganze ist jedenfalls extrem nervig, da ich den Designer nicht mehr verwenden kann, sobald ich eigene Typen und Namespaces einbaue (was praktisch überall ist)...

31.08.2012 - 10:14 Uhr

Danke

Es muss kein Shortcut im Menü angezeigt werden damit das Binding funktioniert. Das Anzeigen des Shortcuts ist nur für den User hilfreich.

das ist mir schon klar 😉 aber ich will ja, dass der user es sieht. wie bekomm ichs denn dann angezeigt?

edit: habs gefunden MenuItem.InputGestureText

31.08.2012 - 07:39 Uhr

Ok, aber damit gibts dann folgende Probleme:

  • Ich muss das Binding 2 mal definieren (für den ToolbarButton und das MenuItem)
  • Der Shortcut wird nicht neben dem Menüheader angezeigt (verwende ich RoutedUICommands mit GestureCollection geht das)

Und wie lagere ich die KeyBindings am sinnvollsten aus, sodass ich die Shortcuts nicht in die View hardcoden muss? Gibt es da best practices?

28.08.2012 - 23:55 Uhr

Hi

Baue eine Anwendung nach MVVM und benutze aktuell RoutedUICommands (hab ne statische klasse mit den Commands, im XAML des Fensters meine CommandBinding-Collection mit den CanExecute und Executed-Events und die zugehörige Implementierung im Codebehind der View).
Das ist aber bei MVVM unpassend, da meine Eventhandler in der View implementiert sind und eben nicht im ViewMoel wo ich sie gern hätte und wo sie bei MVVM auch reingehören.

Nach einigem Suchen bin ich auf Josh Smiths RelayCommand-Implementierung gestoßen. Damit würde das zwar funktionieren, aber RelayCommand unterstützt keine InputGestures, die ich aber brauche.

Gibt es eine bewährte ICommand-Implementierung die wie RelayCommand arbeitet, aber InputGestures unterstützt? Oder hat jemand eine Idee, wie ich die Gestures in RelayCommand reinimplementieren kann (ich wüsste jetzt nicht wie)?

12.06.2012 - 23:06 Uhr

Mir ist bewusst, dass man .NET-Anwendungen sehr einfach Reverse Engineering betreiben kann (mit ILSpy kann man mit ein paar Klicks in den Quellcode schauen).

Nur wie ist das bei C/C++-Anwendungen? Ist das da genauso einfach?
Ich gehe mal stark davon aus, dass ein Kenner kaum Probleme haben wird, den Dekompilierten Code zu durchforsten.

Jetzt ists so, dass ich Dateien verschlüsseln will (mit AES). Die Anwendung soll dabei ohne extra Passwort-Angabe in der Lage sein, die Dateien zu entschlüsseln (um den Inhalt zu laden). Für aussenstehende soll aber durch die Verschlüsselung eine zusätzliche Hürde eingebaut werden.
Mir ist klar, dass das nur eine kleine Hürde wird. Sobald das Passwort irgendwie reinkompiliert wird, kann man auch drankommen (deswegen sollte man ja auch Datenbank-Zugangsdaten niemals in die Assembly hardcoden, sondern immer ne Middleware dazwischenklemmen, über die man Kontrolle hat).
Aber wie viel an Schutz bringt es, wenn man das Passwort hardcoded (OHNE die Exe durch einen Obfuscator zu jagen)? Wie sehr ist dekompilierter C++-Code lesbar?

11.06.2012 - 17:42 Uhr

Das bringt mir leider nichts.
Ich entwickle nicht mit VS und den verbreiteten Programmiersprachen, sondern einer proprietären Skriptsprache/Editor. Hätte ich noch erwähnen sollen...

Daher brauche ich eine generelle Windows-Lösung.

Die Idee mit der Loopback Adresse ist ja nicht schlecht, nur wird dir da kein Paket verloren gehen gg

ist mir bewusst. hab nur gehofft, da gibts einen Datagram-Sieb zum dazwischenklemmen 😄

Ich denke am einfachsten gehts vielleicht noch lokal nen Proxy aufzusetzen, welches deine Zieladresse für den Client ist und welcher nur ne gewissen Anzahl an Pakete zum Server durchlässt wenn du Paketverlust simulieren willst.

welche proxy-software eignet sich da?

11.06.2012 - 17:34 Uhr

Ich bin dabei eine Anwendung (Spiel) zu schreiben, die mit möglichst wenig Bandbreite (soll später über Internet laufen) auskommen muss und UDP als Transportprotokoll nutzt.

Da ich das gern realistisch testen würde (ohne ans Internet oder andere Rechner zu müssen), würd ich das gern über die Loopback-Adresse oder einen simulierten Adapter machen.

Gibt es da Programme oder Tools (die einen Netzwerk-Adapter für ein WAN simulieren oder so), die das können? Empfehlungen?
Mich interessiert vor allem der Paketverlust. Ich kann zwar die gesendeten Bytes zählen und so die benötigte Bandbreite ausrechnen, aber nicht den Paketverlust bei UDP simulieren. Mich interessiert aber, wie groß der Paketverlust sein kann bis das Spiel unspielbar wird (um ggf. Interpolations-Verfahren einzubauen um das ganze zu optimieren)

15.02.2012 - 14:25 Uhr

Ah, Danke, du hast mich da grad auf ne Idee gebracht (die auch funktioniert):

Das Problem tritt nicht auf wenn man die Rückgabe von
info.GetValue("PPElements", typeof(List<LCPPAElement>))
in eine Property oder ein Feld der Klasse schreibt (so wie bei den anderen Properties auch).

Ich hab jetzt ein zusätzliches Datenfeld (vom Typ List<LCPPAElement>) angelegt, welches ich (nur) zum Deserialisieren nutze. Beim deserialisieren werden dann die Elemete in diesem Datenfeld abgelegt. Nachdem LCPRoot deserialisiert wurde (also nach dem fs.close()), lege ich dann die TextSegmentCollection an und schiebe meine Objekte da rein und lösche die List<LCPPAElement>.

Ist zwar etwas unschöner (da mein Objekt nach dem Deserialisieren nicht direkt im Endzustand ist), aber es läuft und ich muss nicht meinen eigenen Deserializer schreiben sondern kann den internen nutzen

15.02.2012 - 12:14 Uhr

Ich will eine komplexere Objektstruktur binär serialisieren.
Es gibt im Root-Element eine Property (Objekt-Sammlung), die nicht serialisierbar ist. Daher wandle ich sie in eine List um und serialisiere sie dann:


[Serializable()]
public class LCPRoot : ISerializable
{
public TextSegmentCollection<LCPPAElement> PPElements{get;set;}
 
 public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            if (info == null)
                throw new System.ArgumentNullException("info");

             List<LCPPAElement> e= PPElements.ToList();

            info.AddValue("PPElements", e);
        }

        public LCPAST(SerializationInfo info, StreamingContext context)
        {
            if (info == null)
                throw new System.ArgumentNullException("info");

            var e = (List<LCPPAElement>)info.GetValue("PPElements", typeof(List<LCPPAElement>));
            PPElements = new TextSegmentCollection<LCPPAElement>();
            foreach (var el in e)
                if(el!=null)
                PPElements.Add(el);

        }

LCPPAElement erbt von LCPAElement. Beide Klassen sind serialisierbar. Die Implementierung ist wie in dem Beispiel hier gemacht : ISerializable.GetObjectData-Methode

Ich rufe (testweise) die Serialisierung folgendermaßen auf:

  LCPRoot root = LCPCache.Cache;
         
                BinaryFormatter binaryFmt = new BinaryFormatter();

                FileStream fs = new FileStream
                    ("objectcache.tmp", FileMode.OpenOrCreate);
                binaryFmt.Serialize(fs, root);
                fs.Close();

                // Deserialize.
                fs = new FileStream
                    ("objectcache.tmp", FileMode.OpenOrCreate);
                LCPRoot newroot = (LCPRoot)binaryFmt.Deserialize(fs);
                fs.Close();
            }
            catch (Exception ex)
            {
            }

Das Serialisieren an sich funktioniert auch. Nach dem Schreiben in die Datei lassen sich alle Informationen auch in der Datei finden.
Beim Deserialisieren springt er in den Serialisierungskonstruktor von LCPRoot. An dieser Stelle

var e = (List<LCPPAElement>)info.GetValue("PPElements", typeof(List<LCPPAElement>));

gibt er mir aber eine Liste mit n Elementen (ich habe auch n Elemente serialisiert), die alle null sind!
Erst nach dem Durchlaufen des LCPRoot-Konstruktors konstruiert er die LCPPAElemente die in die PPElements-Liste gehören (hab ich durch debuggen gemerkt). Das ist aber zu spät: ich brauche die Objekte bereits im LCPRoot-Konstruktor, damit ich die LCPPAElemente in die Collection einfügen kann.

Wie deserialisiert man das korrekt?

26.01.2012 - 21:48 Uhr

das mein ich

26.01.2012 - 21:06 Uhr

In VS gibts ja bei WPF-Steuerelementen und Fenster ein CodeBehind-File.
Im AvalonEdit-Projekt-Quellcode hab ich das auch schon gesehn (da sind klassen als codebehind von anderen klassen festgelegt)

jetzt frag ich mich wie VS ermittelt welche Dateien CodeBehind zu welchen anderen Dateien sind. Und wie man das festlegen kann

20.01.2012 - 08:08 Uhr

auf die idee bin ich auch schon gekommen

mit dem resultat:
im schlüssel HKEY_CLASSES_ROOT.txt ändert sich nichts (auch nicht in seinen unterschlüsseln).
das von mir festgelegte icon zeigt er dann auch nicht
es ist so, als würde der schlüssel ".txt" gar nichts mit txt-Dateien zu tun haben (es ist aber definitiv eine .txt-Datei dessen Standardanwendung ich geändert habe)

ich habs auch mal testweise mit anderen extensions versucht (mal mit .php)
mit dem resultat genau wie oben, blos dass er hier mein icon benutzt, dass ich per defaulticon festgelegt habe.
lösche ich anschließend das "Tedit" aus dem HKEY_CLASSES_ROOT.php manuell raus, öffnet er aber immer noch mit meinem programm (und das icon ist auch noch da)

deswegen, ich bin jetzt schwer verwirrt.

ich hab das so verstanden das HKEY_CLASSES_ROOT.txt den dateityp angibt und der wert des schlüssels die referenz auf die anwendung ist (also HKEY_CLASSES_ROOT\Tedit) wo die shell-commands und das defaulticon angegeben werden

20.01.2012 - 01:17 Uhr

Hi,

ich will mein Programm als Standardanwendung (inkl. eigenem Icon) in der Registry registrieren.
Dazu habe ich folgendes gemacht:

HKEY_CLASSES_ROOT.txt auf "Tedit" gesetzt
HKEY_CLASSES_ROOT\Tedit\DefaultIcon angelegt und auf mein ico-File gesetzt
HKEY_CLASSES_ROOT\Tedit\shell\open\command auf meine Anwendung gesetzt ("C:...\Tedit.exe" "%1")

mit dem Resultat, dass mein Programm in der ÖffnenMit-Liste im Explorer erscheint.
Es ist aber nicht als Standardanwendung registriert.

Warum und wie gehts richtig?

19.01.2012 - 21:33 Uhr

IcoFX ist PERFEKT!
Danke für den hinweis, dass es früher kostenlos war. Hab tatsächlich nach ein bischen googeln noch eine freie, alte Version gefunden (1.6.4)

Problem gelöst

19.01.2012 - 20:21 Uhr

Hi,

bin dabei Icons für meine Dateizuordnungen zu erstellen.
Dazu brauch ich doch *.ico-Dateien.
Nur dieses Format treibt mich in den Wahnsinn

Das Icon habe ich bereits in Photoshop erstellt, jetzt gehts ans konvertieren.
Ich brauche ein Icon mit Alphachannel, also 32-bit.
Das Icon soll aus 3 Bildern bestehen (eine hochauflösende Version (>48x48), eine mittlere (zw. 16x16 und 48x48) und eine kleine (16x16) - die Bilder sind vom Inhalt her komplett verschieden).
Die Mipmaps dazwischen (24x24, 32x32, 64x64, 128x128) kann ich notfalls mit Photoshop einfach erzeugen - also geht davon aus, dass ich sämtliche Bilder in allen Formaten vorliegen habe.

Jetzt zum Problem: wie (d.h. mit was) erstelle ich ein 32-bit-ico-File bei dem ich bilder der einzelnen formate angeben kann?
also am liebsten so: ico-programm-starten -> neues ico mit 32-bit -> png mit 128x128 importieren -> ... -> png mit 16x16 importieren -> speichern als meinicon.ico

ich habs mit zahllosen tools versucht:

  • gimp: macht totaler mist (probleme mit transparent, keine mipmaps)
  • photoshop cs: speichert nicht als ico (das telegraphics-plugin für das ico-format funktioniert auch nicht)
  • paint.net: unterstützt kein ico
  • paint: haha, für das ist alpha ein fremdwort
  • irfan view: erstellt nur 24-bit icons mit 1-bit-alpha-maske, auch keine unterschiedlichen formate möglich
  • resedit: kommt nahe ran (kann alles), aber man kann die bilddaten weder von dateien noch per zwischenablage reinkopieren

wie macht ihr das? welches programm könnte nützlich sein?

03.01.2012 - 10:22 Uhr

d.h. dass die klausel

you may distribute the resulting work only under the same or similar license to this one mich dazu zwingt diese oder eine ähnliche lizenz für mein programm zu nutzen.
da software nicht so gut auf die CC passt (und die CC für software die FSF-lizenzen empfiehlt), heißt das, dass ich eine opensource-lizenz (GPL/LGPL) benutzen muss? oder was wäre sonst noch als "similar" anzusehen?

das beste wird wohl sein, jeden autor einer verwendeten komponente die situation darzulegen und zu fragen um sicher zu gehen...

02.01.2012 - 19:47 Uhr

Folgende Lizenz: CreativeCommons NonCommercial ShareAlike

Darf man solche Photoshop-Brushes / Schriftarten zum erstellen von eigenen Grafiken für a) kostenlose closed-source Software bzw. b) für kommerzielle Software verwenden?
Sprich: bezieht sich das NonCommercial auf eine Redistribution des Brush/Schriftarten-Paketes oder auf das was man damit herstellt?
Zählen Homepages von Vereinen (Reitverein) als kommerzielle Verwendung (wenn eine mit einem Brush erstelle Grafik/Schrift dort verwendet wird)?
Wie ist das zu verstehen?

21.08.2011 - 18:18 Uhr

Hi

ich will meine EXE mit zus. Icons versehen, damit ich Dateiendungen mit individuellem Icon zuordnen kann. Wie mach ich das?
Das Standardsymbol krieg ich geändert (in den Projekteigenschaften), aber wie fügt man weitere Icons hinzu?

13.08.2011 - 23:34 Uhr

Hi

ich nutze das ViewModel-Pattern für einen TreeView, so wie hier: Simplifying the WPF TreeView by Using the ViewModel Pattern

ich habe ein hierachicaldatatemplate und ein datatemplate für meine items.
aber wie handhabt man da click-events bzw. context-menus auf die (verschiedenen) items?

09.08.2011 - 16:08 Uhr

ok

ich hab meinen code jetzt umgebaut und nutze ein viewmodel. ich habe dazu das beispiel von josh smith auf codeproject genutzt: Simplifying the WPF TreeView by Using the ViewModel Pattern

Struktur, siehe Anhang. RootViewModel wird dem DataContext des Trees zugewiesen und enthält 0..* CatViewModels. Jedes CatViewModel enthält 0..* ItemViewModels. Jedem CatViewModel ist genau 1 Cat zugeordnet / jedem ItemViewModel genau 1 Item.
Wie bei Joshs Beispiel auch ziehen sich die TreeViewModels ihre Children aus den Datenhaltungsklassen (hier: Cat und Item)

Nur jetzt ist wenn ich das richtig sehe keine Bindung drin. Die Subklassen von TreeViewItemViewModel implementieren zwar die INotifyPropertyChanged-Schnittstelle, wissen aber nicht wann sich die Daten hintendran ändern.
Wie krieg ich das jetzt noch hin? Ich steh grad aufm schlauch...

09.08.2011 - 01:10 Uhr
<Window x:Class="TreeViewTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:data="clr-namespace:TreeViewTest"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button Margin="331,0,0,0" Click="Button_Click" />
        <TreeView Name="tree" Margin="0,0,178,0" ItemsSource="{Binding Path=Root}" >
           
        </TreeView>
    </Grid>
</Window>

Code in MainWindow.cs


public static readonly DependencyProperty RootProperty = DependencyProperty.Register("Root", typeof(List<Root>), typeof(MainWindow));
        
        public List<Root> Root
        {
            get { return (List<Root>)GetValue(RootProperty); }
            set { SetValue(RootProperty, value); }
        }

Root ist meine Klasse mit den Daten. Später werde ich mit HierachicalDataTemplate die Anzeige noch anpassen...

Egal ob ich das Property "Root" vor oder nach InitializeComponent() initialisiere, es wird im TreeView kein Eintrag angezeigt. Warum, was mache ich falsch?

Es fliegt auch keine Exception. In der Console kommt keine Binding-Exception, selbst wenn ich das Ziel der ItemsSource (Root) absichtlich falsch schreibe.
Initialisiert wird das TreeView aber, ich kanns ja sehen

14.05.2011 - 20:53 Uhr

Danke, genau das hab ich gesucht 😃

14.05.2011 - 16:56 Uhr

Hi

ich habe einen Dateityp erfunden für mein C#-Programm (WPF Application).
Das Programm soll diese Dateitypen öffnen können.
Nur jetzt stehe ich vor dem Problem: Doppelklicke ich auf eine Datei dieses Typs wird das Programm nochmal gestartet. Was ja logisch ist.
Aber ich will dass stattdessen** eine bereits laufende Programm-Instanz** die Datei öffnet.
Zudem will ich dem User nicht verbieten, durch Doppelklicken auf mein Desktop-Symbol mehrere Programminstanzen zu starten.
Ich will halt nur dass - wenn mind. 1 Instanz läuft - der Doppelklcik auf eine Datei bewirkt, dass diese in einer dieser Instanzen geöffnet wird.

Ich hoffe das ist einigermaßen klar geworden...

Ich habe mir auch schon ein paar Gedanken gemacht, wie man das lösen könnte und ich bin zum Schluss gekommen, dass man es mit einem Server machen kann:

1.) Auf Port x wird ein TCP-Listener gesetzt, falls der Port frei ist
2.) Ist beim Programmstart (a) der Port belegt und (b) in den OnStartup-Args Dateinamen enthalten, schicke ich die Namen per Socket an den Port und beende das Programm
Das hätte zur Folge, dass man durch Starten einer Datei immer nur 1 Programminstanz laufen hat, an die die Namen übergeben werden

Aber ist das überhaupt der beste Weg? Ich mein da gibts doch Probleme wenn der Port anderweitig belegt ist und wenn Firewalls falsch konfiguriert sind.

Sowas muss doch irgendwie schon vorhanden sein, das wird doch sicher des öfteren gebraucht wenn man Windows-Programme schreibt.

Also, wie macht man das richtig?

12.05.2011 - 22:09 Uhr

Hi

Also ich habe in meinem Menü folgenden Menüpunkt:

<MenuItem Header="{l:Translate openfile}" Command="cmd:FileCommands.FileOpen">
                    <MenuItem.Icon>
                        <Image Source="/images;component/actions/openfile.png" />
                    </MenuItem.Icon>
                </MenuItem>

"images" ist eine Assembly der gleichen Projektmappe, die eingebunden wird. In ihr befindet sich eine eingebettete Resource (PNG-Grafik), die ich nutzen will.

Er meckert **nicht **rum, dass die Grafik nicht gefunden wird. Starte ich das Programm ist das Icon aber nicht da.
Aber es existiert definitiv, denn wenn ich den Image-Tag im XAML-Code verschiebe (z.B. in meinen Content-Bereich), wird die Grafik **im Designer **angezeigt. Starte ich das Programm, ist es aber wieder nicht da.

Woran liegt das?? Am Format kanns doch eigentlich nicht liegen, wenn es erkannt und (im Designer) gerendert wird...
Ich verzweifel noch dran... aber warscheinlich ists was ganz triviales. Wisst ihr wo das Problem liegt?

30.04.2011 - 00:53 Uhr

Hm..
Mal angenommen er schaut in der Klasse nach zu der Content gehört (müsste UserControl sein). Dann findet er die Eigenschaft "File" natürlich nicht.
Ich bin von ausgegangen, dass er das zur Laufzeit auswertet, ein HexTextBox-Objekt vorfindet, File abruft und Bingo.

Wenn aber in UserControl nachgeschaut wird... wie "caste" ich dann Content zu HexTextBox?
Sowas wie

<ad:DockableContent Title="{Binding Path=((HexTextBox)Content).File, RelativeSource={RelativeSource Self}}" >
     <he:HexTextBox File="test.txt"  />
</ad:DockableContent>

wird ja sicher net gehn ^^

29.04.2011 - 18:43 Uhr

Hi

Ich habe ein Benutzerdefiniertes Steuerelement (Subklasse von TextBox) mit einigen zus. DependencyProperties (u.a. "File").
Dieses ist Kind eines anderen Controls (DockableContent von AvalonDock):


class HexTextBox : TextBox
{
...
        public static readonly DependencyProperty FileProperty = DependencyProperty.Register("FileProperty", typeof(string), typeof(HexTextBox));
       
        public string File
        {
            get
            {
                return (string)GetValue(FileProperty);
            }
            set
            {
                SetValue(FileProperty, value);
            }
        }
...
}


<ad:DockableContent Title="{Binding Path=Content.File, RelativeSource={RelativeSource Self}}" >
     <he:HexTextBox File="test.txt"  />
</ad:DockableContent>

Im Designer zeigt er es (nach Kompilieren) korrekt an. Führe ich mein Programm aber aus, ist der Title leer

Was habe ich falsch gemacht?

04.04.2011 - 22:01 Uhr

Hi

Ich habe in XAML ein 2 Rectangles mit einem Multicolor-Farbverlauf (sprich mit ner gradientstop-collection). das oben liegende Rectangle ist teilweise transparent (das untere scheint also teils durch). wie komme ich jetzt an die farbe (die der benutzer sieht) an der Mauszeigerposition? kann man die irgendwie mit WPF-Mitteln auslesen? Oder geht das nur über einen Workaround über die Win32-API?

Bei nem Image gehts, da hab ich ne Lösung gefunden (über die BitmapSource), aber hier... hab ich keine Ahnung wie mans machen könnte

20.11.2010 - 04:41 Uhr

hi

ich möchte eine tabelle darstellen und habe bestimmte anforderungen. doch ich finde nicht ein geeignetes control.
ich hab das datagrid vom wpftoolkit ausprobiert, aber das entspricht nicht dem was ich brauche.

anforderungen an das control:

  • selection: es muss möglich sein eine einzelne zelle, eine gesamte zeile oder gesamte spalte zu selektieren.
  • ich möchte eine eigene klasse als datenhaltungsschicht nutzen - und zwar spaltenweise (bei listbox mit gridview ists ja so, dass man für die listboxeinträge eine eigene klasse schreiben kann mit eigenschaften, die man dann anzeigen lassen kann. ich brauch sowas auch, nur dass die objekte der klasse keine zeile repräsentieren, sondern eine spalte) -> also ne transponierte darstellung
  • ich will system.windows.shapes in die zellen rendern können (sollte aber bei jedem control mit nem datatemplate machbar sein)

für winforms hab ich ein control gefunden, was das kann: sourcegrid2
allerdings gibts das nicht für wpf

08.09.2010 - 18:47 Uhr

Hi, ich erstelle grade ein eigenes ControlTemplate für den Slider in Blend3.

Ich habe ein zusätzliches Rectangle eingefügt. Dieses besitzt ein Multibinding, durch das es seine Farbe anpasst abhängig wie weit der slider geschoben ist.



...

<GradientStop.Color>
<MultiBinding UpdateSourceTrigger="PropertyChanged" Converter="{StaticResource tlColConv}" ValidatesOnExceptions="True">
<MultiBinding.Bindings>
<Binding ElementName="line" Path="Value" />
<Binding ElementName="line" Path="Maximum" />
</MultiBinding.Bindings>
<MultiBinding.ValidationRules>
<DataErrorValidationRule />
</MultiBinding.ValidationRules>
</MultiBinding>
</GradientStop.Color>
...

"line" ist der name des sliders. tlColConv ist der Konverter.
das funktioniert auch alles, farbe aktualisiert sich, farbberechnung ist korrekt.

das problem:
ich möchte das gleiche auch für den slider-thumb - die farbe soll genauso sein, wie bei diesem rectangle. also habe ich das binding 1:1 in den xaml-code vom thumb kopiert, ebenfalls in die Gradientstop.color eigenschaft (genau wie beim rectangle). jedoch erhalte ich hier ein problem. die input-variablen vom konverter sind nicht etwa Value und Maximum (double), sondern UnsetValue.

in der doku von MS steht, dass man das bekommt, wenn die eigenschaft zwar existiert aber nicht zugreifbar ist (wert nicht bekannt). aber woran liegt das und wie kann man das umgehen?

edit: sry, heißt UnsetValue nicht UnsetProperty

07.09.2010 - 20:41 Uhr

ah danke
das sieht ganz brauchbar aus. ist ja nicht viel laut dem artikel

nur: wie muss ich das einbaun, damit es angewendet wird? muss der style noch irgendwo zugewiesen werden?
bin noch neu in sachen xaml

07.09.2010 - 16:29 Uhr

standardmäßig hat ja die ausgewählte zeile in einem listview einen weiß/bläulichen farbverlauf. wie kann ich diesen brush ändern?

27.08.2010 - 13:37 Uhr

hi

gibt ja millionen verschiedene arten von tabellen und tabellenähnlichen controls in wpf.

ich will

  • eine tabelle mit 3 spalten
  • (wenn möglich) in eine spalten image-buttons in der zelle
  • scrollbars die bei bedarf erscheinen
  • zeilen verschiebbar haben (nach unten oder oben)

welches control muss ich da nehmen?
datagrid? table? datatable?

ich kenne bisher nur die JTables von javax.swing - gibts in wpf nicht ein control, das sich so verhält? damit komm ich klar

26.08.2010 - 19:27 Uhr

hey

fehler gefunden

ich hab das projekt mal in blend geöffnet. hab gedacht, wenns ums design geht, werd ich wohl ausführlichere infos bekommen. bekam aber das gleiche - mit dem unterschied, dass mir eine wichtige zeile ins auge gesprungen ist: der fehler wird nicht vom xaml verursacht, sondern einer dll, die ich verwende. diese dll wurde unter einem 32bit-system kompiliert und ich hab hier win7 64bit und vergessen die zielplattform auf x86 zu stellen 😭

werd das mit dem binding jetzt testen aber ich glaub mit der doku und n bischen hirn krieg ich das hin

26.08.2010 - 16:56 Uhr

danke talla, das werd ich mir mal bookmarken. das ist recht gut erklärt

hab jetzt mal was eingebaut. lässt sich auch kompilieren. allerdings kommt beim ausführen ein fehler.
hab dann testweise die änderung wieder ausgebaut - aber der fehler kommt trotzdem noch...
der designer lädt ohne probleme, nur bei der ausführung der anwendung tritt das problem auf.

ich bekomme beim starten:

Die in der Assembly "Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" definierte Instanz von "MainWindow" kann nicht erstellt werden. Ein Aufrufziel hat einen Ausnahmefehler verursacht. Fehler in Markupdatei "Test;component/MainWindow.xaml", Zeile 2, Position 2.

Das ist der Code der MainWindow.xaml:

<Window
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:c="clr-namespace:Test"
	x:Class="Test.MainWindow"
	x:Name="Window"
	Title="MainWindow"
	Width="489" Height="264" WindowStyle="ThreeDBorderWindow" Background="Black"  MouseLeftButtonDown="Window_MouseLeftButtonDown">

	<Grid x:Name="LayoutRoot">
        <Grid.Resources>
            <c:ImgData x:Key="imgd" />
        </Grid.Resources>
        <Grid.DataContext>
            <Binding Source="{StaticResource imgd}" />
        </Grid.DataContext>
        
        <Menu Height="28" Name="menu1" VerticalAlignment="Top">
            <MenuItem Header="Datei">
                <MenuItem Header="Öffnen" />
                <MenuItem Header="Speichern unter" />
                <MenuItem Header="Beenden" />
            </MenuItem>
        </Menu>
        <Label Height="30" HorizontalAlignment="Left" Margin="36,47,0,0" Name="textFile" VerticalAlignment="Top" Width="105" Foreground="White">Label</Label>
        
        <Slider Margin="34,101,229,98" Name="positioning" Width="199" Height="22" HorizontalAlignment="Left" VerticalAlignment="Top" Maximum="1000" Value="{Binding Path=Position}">
            
        </Slider>
    </Grid>
</Window>

Was bitteschön ist in Zeile 2, Position 2 falsch??

26.08.2010 - 15:10 Uhr

das funktioniert irgendwie nicht.

ich hab mir das mal durchgelesen und wenn ichs richtig verstanden habe bewirkt der dataobjectprovider

<ObjectDataProvider x:Key="persons" 
ObjectType="{x:Type svc:PersonService}" 
MethodName="GetPersonList"></ObjectDataProvider>

dass eine instanz von "PersonService" erzeugt wird und die methode "GetPersonList" benutzt wird um die Daten zu holen.

aber
wie können dann die daten bei der 2-wege-bindung gesetzt werden?
und wie kann man da ein objekt angeben was er nutzen soll? soll ja keins erzeugt werden, das objekt gibts ja schon in der codebehind

und dann schimpft der parser, dass "nur objektevon typ uielements" zulässig sind...

wieso kann man nicht einfach sagen

<Slider Value="{Binding this.obj.Position, Mode=TwoWay}" />

und fertig?

26.08.2010 - 14:37 Uhr

Hallo, ich habe eine WPF-GUI.
In dieser GUI ist ein Slider.
In der Codebehind-Datei der GUI gibt es ein Datenfeld.
Dieses Datenfeld besitzt Eigenschaften.
Ich möchte jetzt eine 2-Wege-Bindung zwischen Value (vom Slider) mit einer Eigenschaft des Objektes (Position) herstellen, also Slider.Value <-> MyObject.Position

noch zur info: die klasse selbst kann ich nicht ändern, die ist von einem anderen framework

wie geht das?

ich hab im internet einige tutorials gefunden, aber da wird nur ne bindung zwischen 2 gui-elementen beschrieben

07.08.2010 - 12:36 Uhr

wenn die Datei als Parameter einen Dateinamen bzw. -pfad bekommt, dann musst du die Datei (unverschlüsselt) auf die Platte (genauer in ein Dateisystem) schreiben. Einen anderen Weg gibt es nicht. Dein Wunsch ist leider unerfüllbar. Was anderes wäre es, wenn die Bibliothek auch einen Stream als Parameter akzeptieren würden. Dann könntest du einen MemoryStream verwenden.

ich habs befürchtet. aber ich wollt sichergehn, obs da nicht doch ne möglichkeit gibt.
leider akzeptiert die bibliothek nur einen dateispad und keine streams. sonst hätte ich das längst mit nem memorystream gemacht.
dann werd ich mal schauen ob ichs nicht auf andere weise wenigstens eingrenze. also dass ich die verschlüsselte datei entpacke, irgendwo versteckt ablege und nach dem schließen der anwendung wieder lösche. dann gibts zwar trotzdem nicht mehr sicherheit, aber ich kann potenziellen raubkopierern wenigstens ein steinchen in den weg legen

danke für eure antworten

06.08.2010 - 19:53 Uhr

Hallo

ich nutze eine externe Bibliothek. Diese verarbeitet eine Datei. Damit ich die Bibliothek nutzen kann muss folglich die entsprechende Datei auf dem Dateisystem liegen.
Jedoch möchte ich die Datei schützen (ich hab sie erstellt und will nicht dass man sie kopieren kann).

Mein Problem ist: ich kann sie zwar verschlüsselt ablegen, aber zur verwendung muss sie entschlüsselt auf dem dateisystem liegen.
gibts nicht einen weg sie in den arbeitsspeicher zu mappen und sie von dort aus zu nutzen (damit wenigstens keine script-kiddies dran kommen)? zum mappen von dateien gibts ja funktionen, aber wie übergeb ich die der bibliothek? alternativ zu "C:\meinedatei.txt" müsste es was geben wie "ram:\speicheradresse" damit das funktioniert.

was könnte ich da tun?

04.05.2010 - 17:59 Uhr

ich kann eclipse nicht leiden. war in meiner java-zeit schon ungeliebt. eclipse ist vielleicht das visual studio der opensource-gemeinschaft, aber ich stoße mich bei dem ding an vielen ecken und kanten

aber netbeans ist ne gute idee. das ich da nicht selbst drauf gekommen bin (benutz es ja für java). das werd ich mal ausprobieren. danke

04.05.2010 - 16:05 Uhr

hi

ist zwar jetzt nichts was mit C# oder .NET im direkten sinne zu tun hat, aber ich hoffe ihr könnt mir trotzdem helfen:

visual studio dürfte ja bekannt sein.
ich suche eine nicht-microsoft-ide (die den gnu-compiler nutzt; darf ruhig nur für windows verfügbar sein. cross-plattform aber auch erwünscht), die trotzdem einen äquivalenten komfort bietet.

ich hab jetzt schon einige ausprobiert, aber die sind alle grauenhaft.
ich lege insbesondere auf das handling des debuggers wert, sowie auf die syntax-hervorhebung, code-vervollständigung und code-einrückung. am besten, wie mans aus VS gewöhnt ist

dev-cpp gefällt mir absolut nicht. allein schon die einrückung macht mich wahnsinnig. und code-vervollständigung sucht man auch vergebens

code::blocks hat mich auf den ersten blick angesprochen, aber das debugger-handling lässt zu wünschen übrig (z.b. das hinzufügen von watches und das überblicken von variablen während des debuggens)

wie kommts eigentlich, dass irgendwie keine c/c++-ide einen live-syntaxcheck hat? hab ich bisher noch nie gesehn :p

hab ich die guten IDEs übersehn oder quälen sich c++-Entwickler echt mit diesen halbausgereiften tools rum?

04.05.2010 - 09:09 Uhr

sehr gut, weil bei uns im msdnaa gibts nur die englische und die beta
na dann kann ich mich ja demnächst freuen 😁

04.05.2010 - 08:38 Uhr

bei uns ist nur die englische version drin.
gibts das auch in deutsch in absehbarer zeit?

30.04.2010 - 14:50 Uhr

geht das denn? kann ich die sicherheitsebene mittels reflection umgehen??
ich werds aber nachher mal ausprobieren um sicher zu gehen...