WPF

Richieste di supporto in merito a problemi su hardware e firmware

17/07/2013 23:10:16
Iob
Gravatar
Totale Interventi 2

WPF

Ciao

sto facendo le prime prove con MF 4.3 e nello specifico vorrei sperimentare una macchina che alla partenza carica una serie di servizi; man mano che questi sono inizializzati, il display mostra lo stato a mo' log; il tutto utilizzando le librerie WPF del Micro Framework.

Ho creato una progetto di tipo Application e scopiazzato il main.

 public staticvoid Main()

{

    Machine theMachine = newMachine();

    startupWindow = newStartupWindow(theMachine);

    GPIOButtonInputProvider inputProvider = newGPIOButtonInputProvider(null);

    theMachine.Run(startupWindow);

}

La startupWindow ha come child uno StackPanel:

this.Child = new StackPanel();

Il logging dovrebbe avvenire aggiungendo nuovi Text allo StackPanel che dovrebbero accodarsi sul display uno dopo l'altro; io uso quanto segue

  this.Dispatcher.Invoke(newTimeSpan(0, 0, 0, 1), del =>

      { (this.Child asStackPanel).Children.Add(new Text("Service 1 loaded")); return null; },

      null);

Ho anche provato con BeginInvoke() ma nell'emulatore (quello di default) la startupWindow non viene mai aggiornata;  esiste un modo per forzare il refresh della window.

Grazie

 

18/07/2013 07:48:49
Gravatar
Totale Interventi 75

Re: WPF

Credo che l'inghippo sia una banale questione di font.

Come riferimento, dai un'occhiata a questo esempio:

 

using System;

using Microsoft.SPOT;
using Microsoft.SPOT.Input;
using Microsoft.SPOT.Presentation;
using Microsoft.SPOT.Presentation.Controls;

namespace MFWindowApplication1
{
    public class Program : Microsoft.SPOT.Application
    {
        public static void Main()
        {
            Program myApplication = new Program();

            Window mainWindow = myApplication.CreateWindow();

            // Create the object that configures the GPIO pins to buttons.
            GPIOButtonInputProvider inputProvider = new GPIOButtonInputProvider(null);

            // Start the application
            myApplication.Run(mainWindow);
        }

        private Window mainWindow;
        private StackPanel stackPanel;

        public Window CreateWindow()
        {
            // Create a window object and set its size to the
            // size of the display.
            mainWindow = new Window();
            mainWindow.Height = SystemMetrics.ScreenHeight;
            mainWindow.Width = SystemMetrics.ScreenWidth;

            stackPanel = new StackPanel();

            // Add the text control to the window.
            mainWindow.Child = stackPanel;

            // Connect the button handler to all of the buttons.
            mainWindow.AddHandler(Buttons.ButtonUpEvent, new RoutedEventHandler(OnButtonUp), false);

            // Set the window visibility to visible.
            mainWindow.Visibility = Visibility.Visible;

            // Attach the button focus to the window.
            Buttons.Focus(mainWindow);

            return mainWindow;
        }

        private void OnButtonUp(object sender, RoutedEventArgs evt)
        {
            ButtonEventArgs e = (ButtonEventArgs)evt;

            stackPanel.Children.Add(new Text(DateTime.Now.ToString()) { Font = Resources.GetFont(Resources.FontResources.small)});

            // Print the button code to the Visual Studio output window.
            Debug.Print(e.Button.ToString());
        }
    }
}