Ich möchte einige Eigenschaften meines Window
in Xml bei Beendigung gespeichert und neu geladen und beim Start angewendet werden.Kann Standort und WindowSize nicht von Config übernehmen
Ich spare die Werte zu XML
, die bis jetzt gut funktioniert. Ich aktualisiere die Werte in meinem ViewModel in der zugehörigen ChangedEvents
.
[Serializable]
public class UserSettings
{
public double WindowWidth { get; set; }
public double WindowHeight { get; set; }
//GridSplitter
public double GridLength_Pixels { get; set; }
public double WindowPositionX { get; set; }
public double WindowPositionY { get; set; }
}
Das ist mein XAML
:
<Window x:Class="MonitorTool.Windows.MainWindow"
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:local="clr-namespace:MonitorTool"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
Title="Transport Monitor"
MinWidth="300"
MinHeight="550"
Height="{Binding WindowHeight, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Width="{Binding WindowWidth, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Topmost="{Binding ElementName=TopMostCheckBox, Path=IsChecked}"
Icon="{Binding Path=Icon, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Left="{Binding Path=LocationX, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Top="{Binding Path=LocationY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
[...]
Die propertiesin meine Ansichtsmodell sind alle ziemlich gleich, so werde ich hier eine Pose nur, aber es sollte klar sein:
public double WindowWidth
{
get { return _windowWidth; }
set
{
_windowWidth = value;
OnPropertyChanged("WindowWidth");
}
}
So Ich habe eine Methode namens ApplyUserSettings
erstellt, die in MainWindow_ContentRendered
aufgerufen wird, wo ich meine Config laden und die Eigenschaften mit diesen Werten füllen.
Aber nichts passiert und ich wusste nicht, wo ich nach einer Lösung suchen sollte. Ich habe viele Beispiele online gefunden, wo ppl auf defaultSettings gespeichert wird, aber das scheint kein großer Unterschied zu sein - so sollte es auch mit meiner eigenen Einstellungsdatei funktionieren.
Wer eine Idee, was hier falsch sein könnte?
EDIT:
Es scheint, wie die Fenster Start-ups mit MinWidth
und MinHeight
.
EDIT V2: Das Ansichtsmodell:
In MainWindow.xaml.cs
:
public MainWindow()
{
InitializeComponent();
if(MainWindowViewmodel.Instance == null)
{
MainWindowViewmodel.Instance = new MainWindowViewmodel(this);
}
DataContext = MainWindowViewmodel.Instance;
InitializeTray();
TrayIcon.Visible = true;
}
Wie Sie richtig sehen können, wird der Wert eingestellt, aber es scheint, wie sein nicht angewandt; (
Bei eingestellt werden welchem Punkt Sie Ihre Ansichtsmodell erstellen? Schaffst du es nur im XAML? I.e. ist eine neue Ansicht Modell erstellt jedes Mal, wenn Ihr Fenster über die XAML startet? –
@GingerNinja nein Ich habe eine Instanz Ich habe auch einen Splashscreen, der das gleiche vm verwendet, aber dort verwende ich die gleiche Instanz davon –
Es gibt ein Dutzend Fragen in StackOverflow mit dem gleichen Kontext und vielen Gründen warum verbindliche Eigenschaften wie Breite funktioniert nicht. Sie schlagen auch viele Workarounds vor. Hast du eines davon gesehen/probiert? Wenn das so was nicht funktioniert? – Athafoud