private void ColumnExpression_Loaded(object sender, RoutedEventArgs e)
        {
            SpreadsheetHeaderExpressionText expressionTextBox = sender as SpreadsheetHeaderExpressionText;
            DataGridColumnHeader            header            = UIHelper.FindVisualParent <DataGridColumnHeader>(sender as FrameworkElement);
            int col = grid.Columns.IndexOf(header.Column);

            expressionTextBox.valueStore = valueStore;
            expressionTextBox.data       = data.columnDatas[col];
        }
        private void RowExpression_Loaded(object sender, RoutedEventArgs e)
        {
            SpreadsheetHeaderExpressionText expressionTextBox = sender as SpreadsheetHeaderExpressionText;
            DataGridRowHeader header  = UIHelper.FindVisualParent <DataGridRowHeader>(sender as FrameworkElement);
            DataGridRow       gridRow = UIHelper.FindVisualParent <DataGridRow>(header);
            int row = (gridRow as DataGridRow).GetIndex();

            expressionTextBox.valueStore = valueStore;
            expressionTextBox.data       = data.rowDatas[row];
        }
        private void RowExpression_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            DataGridRowHeader header = UIHelper.FindVisualParent <DataGridRowHeader>(sender as FrameworkElement);
            SpreadsheetHeaderExpressionText expressionTextBox = UIHelper.FindVisualChild <SpreadsheetHeaderExpressionText>(header);

            Dispatcher.BeginInvoke(DispatcherPriority.Input,
                                   new Action(delegate()
            {
                expressionTextBox.GetFocusBack();
            }));
        }
        private void ColumnExpression_GotFocus(object sender, RoutedEventArgs e)
        {
            SpreadsheetHeaderExpressionText expressionTextBox = sender as SpreadsheetHeaderExpressionText;
            DataGridColumnHeader            header            = UIHelper.FindVisualParent <DataGridColumnHeader>(sender as FrameworkElement);
            TextBox textBox = UIHelper.FindVisualChild <TextBox>(header);
            // TODO: there should be better way to hide the text than cleaning the header,
            // it's a workaround to fix the blank glitch if the expressionText contains variable
            //textBox.Visibility = Visibility.Hidden;
            int col = grid.Columns.IndexOf(header.Column);

            grid.Columns[col].Header = "";
        }
        private void ColumnExpression_LostFocus(object sender, RoutedEventArgs e)
        {
            SpreadsheetHeaderExpressionText expressionTextBox = sender as SpreadsheetHeaderExpressionText;
            DataGridColumnHeader            header            = UIHelper.FindVisualParent <DataGridColumnHeader>(sender as FrameworkElement);
            TextBox textBox = UIHelper.FindVisualChild <TextBox>(header);
            int     col     = grid.Columns.IndexOf(header.Column);

            string expression = expressionTextBox.GetExpression();

            data.SetColumnExpression(col, expression);

            expressionTextBox.UpdateDisplay();
            expressionTextBox.Visibility = Visibility.Hidden;
            //textBox.Visibility = Visibility.Visible;
            UpdateColumn(col);
        }
        private void RowExpression_LostFocus(object sender, RoutedEventArgs e)
        {
            SpreadsheetHeaderExpressionText expressionTextBox = sender as SpreadsheetHeaderExpressionText;
            DataGridRowHeader header  = UIHelper.FindVisualParent <DataGridRowHeader>(sender as FrameworkElement);
            DataGridRow       gridRow = UIHelper.FindVisualParent <DataGridRow>(header);
            TextBox           textBox = UIHelper.FindVisualChild <TextBox>(header);
            int row = (gridRow as DataGridRow).GetIndex();

            string expression = expressionTextBox.GetExpression();

            data.SetRowExpression(row, expression);

            expressionTextBox.UpdateDisplay();
            expressionTextBox.Visibility = Visibility.Hidden;
            //textBox.Visibility = Visibility.Visible;
            UpdateRow(row);
        }