コード例 #1
0
        private void SimulateComboBox(List <object> list, CellBeforeEditEventArgs e)
        {
            int currentColIndex = e.Cell.Column;
            int currentRowIndex = e.Cell.Row;

            Window    window    = new Window();
            WrapPanel wrapPanel = new WrapPanel();
            ListBox   listBox   = new ListBox();

            listBox.SetValue(ScrollViewer.HorizontalScrollBarVisibilityProperty, ScrollBarVisibility.Hidden);
            listBox.SetValue(ScrollViewer.VerticalScrollBarVisibilityProperty, ScrollBarVisibility.Hidden);
            listBox.Width = _ColumnWidthList.ElementAt(e.Cell.Column);

            for (int i = 0; i < list.Count; i++)
            {
                var         item        = list.ElementAt(i);
                ListBoxItem listBoxItem = new ListBoxItem();
                listBoxItem.Content = item;
                listBox.Items.Add(listBoxItem);
            }
            listBox.RenderTransform = new ScaleTransform(_Worksheet.ScaleFactor, _Worksheet.ScaleFactor);

            listBox.MouseDoubleClick += (object obj, MouseButtonEventArgs eventArgs) => {
                e.EditText          = (listBox.SelectedValue as ListBoxItem).Content.ToString();
                window.DialogResult = true;
            };
            wrapPanel.Children.Add(listBox);
            Point point = new Point();

            for (int rowIndex = 0; rowIndex <= currentRowIndex + 1; rowIndex++)
            {
                point.Y += (int)(_RowHeightList.ElementAt(rowIndex) * _Worksheet.ScaleFactor);
            }
            for (int colIndex = 0; colIndex < currentColIndex; colIndex++)
            {
                point.X += (int)(_ColumnWidthList.ElementAt(colIndex) * _Worksheet.ScaleFactor);
            }
            point.X += (int)(_Worksheet.RowHeaderWidth * _Worksheet.ScaleFactor);
            Point screenPoint = _ReoGridControl.PointToScreen(point);

            window.Width                 = _Worksheet.ColumnHeaders[e.Cell.Column].Width;
            window.WindowStyle           = WindowStyle.None;
            window.ResizeMode            = ResizeMode.NoResize;
            window.BorderThickness       = new Thickness(0);
            window.Content               = wrapPanel;
            window.SizeToContent         = SizeToContent.WidthAndHeight;
            window.WindowStartupLocation = WindowStartupLocation.Manual;
            window.Left    = screenPoint.X;
            window.Top     = screenPoint.Y;
            window.Loaded += (object win, RoutedEventArgs routedEventArgs) =>
            {
                wrapPanel.Width  = listBox.RenderSize.Width * _Worksheet.ScaleFactor;
                wrapPanel.Height = listBox.RenderSize.Height * _Worksheet.ScaleFactor;
            };
            window.ShowDialog();
        }