/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public StateDisplay(Frame setFrame, string[] setVaraibleNames)
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        {
            InitializeComponent();

            variableNames = setVaraibleNames;
            frame         = setFrame;


            frame.ValueChanged += new IntDelegate(frame_ValueChanged);

            double[] stateVector = frame.State;

            for (int i = 0; i < stateVector.Length; i++)
            {
                ColumnDefinition column = new ColumnDefinition();
                column.MinWidth = 40;
                grid.ColumnDefinitions.Add(column);

                StateValue stateValue = new StateValue();
                stateValue.VariableName = variableNames[i];
                Grid.SetColumn(stateValue, grid.ColumnDefinitions.Count - 1);
                grid.Children.Add(stateValue);

                stateValue.Value = (float)stateVector[i];

                if (stateVector[i] == 0)
                {
                    stateValue.Active = false;
                }

                stateValue.textBox.TextChanged += new TextChangedEventHandler(textBox_TextChanged);
            }
        }
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        void textBox_TextChanged(object sender, TextChangedEventArgs e)
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        {
            //get the display
            StateValue stateValue = (StateValue)((Grid)((TextBox)sender).Parent).Parent;

            //set the value
            frame.SetValue(Grid.GetColumn(stateValue), (byte)int.Parse(stateValue.textBox.Text));
        }