Pregunta

Estoy usando el siguiente código para guardar y restaurar la posición y el tamaño de la ventana al reiniciar.

¡Estoy observando una deriva ascendente de 28 píxeles cada vez que ejecuto este código !

¿Estoy leyendo los valores incorrectos o los estoy restaurando incorrectamente? ¿De dónde proviene el número 28 (tamaño del cromo) (y cómo lo explicaría programáticamente, en lugar de un número fijo en el código)?

Aquí está mi código:

public partial class MainStudioWindowControl : RibbonWindow
{
    public MainStudioWindowControl()
    {
        App.MainWindowOwner = this;
        this.Loaded += new System.Windows.RoutedEventHandler(MainStudioWindowControl_Loaded);
    }

    void MainStudioWindowControl_Loaded(object sender, System.Windows.RoutedEventArgs e)
    {
        System.Windows.Window mainWindow = System.Windows.Application.Current.MainWindow;
        mainWindow.WindowStartupLocation = System.Windows.WindowStartupLocation.Manual;
        if (Studio.Properties.Settings.Default.Width > 0)
        {
            mainWindow.Left = Studio.Properties.Settings.Default.Left;
            mainWindow.Top = Studio.Properties.Settings.Default.Top;
            mainWindow.Width = Studio.Properties.Settings.Default.Width;
            mainWindow.Height = Studio.Properties.Settings.Default.Height;
        }
        Debug.WriteLine(string.Format("Loading: Top = {0}", this.Top));
    }

    protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
    {
        base.OnClosing(e);
        System.Windows.Window mainWindow = System.Windows.Application.Current.MainWindow;
        Studio.Properties.Settings.Default.Left = mainWindow.Left;
        Studio.Properties.Settings.Default.Top = mainWindow.Top;
        Studio.Properties.Settings.Default.Width = mainWindow.Width;
        Studio.Properties.Settings.Default.Height = mainWindow.Height;
        Studio.Properties.Settings.Default.Save();
        Debug.WriteLine(string.Format("Saving: Settings.Top = {0}", Studio.Properties.Settings.Default.Top));
    }
}
¿Fue útil?

Solución

Prueba esto:

1) Derive su clase de la ventana normal, no de RibbonWindow; si eso lo soluciona, es un problema de RibbonWindow.

2) Use valores codificados para establecer las mediciones en el controlador Cargado; si eso lo soluciona, el problema tiene algo que ver con la configuración.

Con estos dos cambios, funcionó bien para mí. La ventana aparecía donde debería estar siempre.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top