Seit VS 2015 gibt es rechts oben das suchfeld Quick Launch (mit CTRL Q). Dannach kannst du einfach Collapse eingeben und siehst welchen shortcut es dafür gibt: Siehe Anhang
Ich bin der Meinung das die Abhandlung so sehr schlecht ist.
Wenn ich einen button Click handler mit einem "nicht Button Object" aufrufe darf gerne eine Exception kommen. Da die NullRefExceptions immer sehr nichtssagend sind würde ich wahrscheinlich eine ArgumentException mit message werfen.
Wenn der Programmcode in der Methode nur funktioniert wenn ich einen Button übergebe will ich eine Exception wenn ich die Methode falsch verwende ( eine die mir sagt was falsch ist). Wenn die Methode ohne Button Object im sender funktioniert brauch ich auch keine Warning Message Box.
Aus einem Programmierfehler eine klickbare MessageBox zu machen die der User am Ende einfach wegdrückt ohne sie zu lessen finde ich furchtbar. MessageBoxen mit einer Wahl sollten sowieso verboten sein ;)
Ich bin ein großer Fan von Single Window Applications, die dem App - Style folgen und immer nur eine Ansicht haben, dafür muss man sich etwas mehr mit dem Inhalt und vor allem mit der Navigation beschäftigen. Wir verwenden auch Caching damit Eingabefenster ohne bedenken während der Arbeit wieder verlassen werden können, usw.
Wir haben vor einem Jahr eine Software umgestellt von sehr vielen stackenden Fenstern auf ein einzelnes (haben ebenfalls auf WPF umgestellt btw). Selbst bei einem Experten Tool wie unserer Software kommt die änderung sehr gut an. Aber wie oben schon angedeutet ist das ganze etwas mehr aufwand.
PS: Wenn WPF auch möglich ist kannst du direkt ein TabControl verwenden und so umstylen das die Tab Header so aussehen wie du willst. (Geht bei WinForms auch ist aber immer deutlich mehr aufwand)
Wenn du ein custom Window haben willst würde ich erstmal http://mahapps.com/ versuchen um das gewünschte (oder alternativ einfach ein modernes) custom Window zu bekommen. Wenn man damit nicht zurecht kommt kann man bei Github den Sourcecode durchstöbern und das ganze selbst implementieren (so habe ich es auch gemacht).
P.S. Mit dem NonClient Area zeugst wird hier übrigens nichts gemacht. Würde ich auch nicht empfehlen.
Ich verstehe die Frage nicht ganz: Aus was besteht deine WPF anwendung? Pages oder Windows, Wenn ein teil der application immer gleich aussehen soll wäre es wahrscheinlich besser diesen teil nicht nur einmal zu definieren sondern auch nur einmal zu instanzieren und dann den teil der sich ändert durch ein UserControl oder eine Page zu Setzten. Oder mit hilfe von Frame und Page..
Thumb thumb = sender as Thumb;
if (thumb == null) return;
Node node = thumb.DataContext as Node;
if (node == null) return;
node.Move(e);
Das ganze funktioniert wie gewünscht.
Jedoch nur mit der Maus, wie kann ich einem Thumb ebenfalls auf Touch events reagieren oder muss ich mir hier mit Manipulation alles selber implementieren ?
Das UIElement liegt auf einem ScrollViewer welcher den PanningMode auf HorizonzalOnly gestellt hat, entferne ich diese Property funktioniert das ManipulationDelta wie gewünscht.
Der ScrollViewer ändert mir wohl den Mode auf Translate.
Wenn ich von ScrollViewer ableite und OnManipulationStarting überschreibe funktioniert es.
Ich versuche gerade eine AttatchedProperty zu schreiben um einem UIElement das Zoomen per Touch zu ermöglicht. Dazu verwende ich das ManipulationDelta Event des UIElements.
Die Scale Property der EventArgs ist jedoch immer gleich (1,1)
Während alle andere Propertys ein nachvollziebares ergebniss ausspucken.
Hier der Code des events.
Sollte ich für Zoom mit etwas anderem arbeiten oder wieso ist das Delta hier immer gleich?
Dein ansatz mit Ziffern ist falsch damit kann man nie das maximum erreichen da du mit 2* 4 bit nu 0-99 darstellen kannst während ein byte 0-255 darstellen kann.
des weiteren ist eine floating point number wie double nicht präzise und verliert information.
Ich würde eher den ansatz gehen mit long oder int zu arbeiten anstelle von char/bit oder byte/
sieh dir mal die implementierung von BigInteger an vielleicht ist das etwas in deine richtung.
EDIT: Ich wusste garnicht das es eine Framework klasse auch gibt ^^
wenn du genau das erreichen willst bist du wahrscheinlich mit PostSharp am schnellsten am Ziel. Wobei ich mir nicht vorstellen kann wozu das gut sein soll.
Zugriff auf die Serielle schnitstelle (System.IO.SerialPort) und OleDbConnection (da wir ältere Datei formate unterstützen müssen)
Im grunde jedoch sollte es mit überscheibarem aufwand möglich sein eine .NET Core Framework klasse in meiner Store App über diese Brücke und entsprechnde Wrapper anzusprechen.
Ich suche nach einer einfachen möglichkeit eine brücke zwischen einer desktop exe und einer windows store app zu erstellen (das diese nicht über den store installiert werden kann ist mir klar).
Rufus ist eine eine open source software zum erstellen von bootbaren usb sticks (ist ein Visual C++ projekt wenn ich richtig liege) vielleicht kommst du damit weiter.
Du kannst einfach einen DelegateCommand verwenden der die Selbe Methode benutzt wie der ButtonClick Handler. Alternativ kannst du auch den Button an den Selben Command binden und dir den Handler sparen. Mit DataContext -> Self
public ICommand HotkeyCommand { get { return new DelegateCommand(this.DoSomething) ;} }
Bzw den Command besser im Constructor erstellen da du ja nur einen benötigst.
Okay ich habe es nun gefunden.
Mir war nicht klar das das DataBinding die Werte über die DP zuweißt und nicht über die Property deswegen wurde mein Handler immer verworfen.
Mit einen PropertyChanged Handler in der Metadata Funktioniert es.
Okay ich habe das "Problem" jetzt gefunden, entferne ich den DataContext aus dem UserControll funktioniert es.
Nun tritt ein seltsames Problem auf:
Obwohl sich die Collection meines UserControlls ändert wird der EventHandler nicht ausgelöst. Obwohl die CollectionChanged handler nicht null ist.
UserControl:
public static readonly DependencyProperty ValuesProperty =
DependencyProperty.Register("Values", typeof(ObservableCollection<CurvePoint>), typeof(CurveTest), new PropertyMetadata(new ObservableCollection<CurvePoint>()));
public ObservableCollection<CurvePoint> Values
{
get { return (ObservableCollection<CurvePoint>)GetValue(ValuesProperty); }
set
{
value.CollectionChanged += Values_CollectionChanged;
SetValue(ValuesProperty, value);
}
}
public CurveTest()
{
this.InitializeComponent();
this.Values.CollectionChanged += Values_CollectionChanged;
}
void Values_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
}
Ja es ist ein eigenes UserControl, Values ist eine DependencyProperty im Output stehen im Moment keine Fehler. Montag kann ich das ganze nochmal mit Tracing versuchen.
Das TwoWay wird benötigt ändert aber nichts an meinem Problem.
DebugConverter seh ich mir ebenfalls am Montag an.
das DefaultViewModel["Values"] ist ebenfalls an einen ListView gebunden:
Füge ich dem DefaultViewModel["Values"] nun werte hinzu werden die änderungen im ListView angezeigt in meinem UserControll kommen diese jedoch nicht an (Die Collection ist weiterhin Leer) wieso werden die Änderungen nicht an mein UserControl weitergegebn
Nach etwas Googeln bin ich nicht wirklich schlauer geworden, bis auf die Tatsache das es wohl mit Windows 8 nicht möglich ist auszulesen welche Farbe Windows 8 gerade verwendet.
Mir geht es um die Einstellungen: die Übersicht wird hier immer in der Aktuellen Systemfarbe angezeigt, genauso wie der unterpunkt "Permissions" immer den Header der aktuellen Systemfarbe verwendet. Bei meinem eigenen unterpunkten hätte ich natürlich auch gerne die selbe Farbe.
Weiß jemand ob sich die Systemfarbe der Metro UI mit 8.1 auslesen lässt?