Положение большого пальца динамической сетки данных WPF изменилось, когда определение строки и столбца добавляется в выбC#

Место общения программистов C#
Anonymous
Положение большого пальца динамической сетки данных WPF изменилось, когда определение строки и столбца добавляется в выб

Сообщение Anonymous »

Требование:
Наше требование — нарисовать пустую сетку (таблицу со строками и столбцами) поверх таблиц, присутствующих на изображении, и для одного изображения может быть несколько сеток. . Все сетки должны быть настраиваемыми, и мы можем добавить разделитель строк и разделитель столбцов по щелчку кнопки мыши в сетке. Определения сеток, миниатюр и строк-столбцов создаются на основе кода.
Проблема:
Если создается определение столбца или строки, положение миниатюр сетки изменяется, и это перемещается в первый столбец первой строки вместо того, чтобы оставаться статическим во внешней сетке. Изменяется положение верхнего, левого, правого и нижнего большого пальца. Не могли бы вы помочь нам в этом вопросе?
XAML: Код C Sharp:

Код: Выделить всё

    private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Point clickPosition = e.GetPosition(selectedGrid);

if (_rowSeperator && !isDragging)
{
if (!gridDataMap[selectedGrid].RowSeparators.Contains(clickPosition.Y))
{
gridDataMap[selectedGrid].RowSeparators.Add(clickPosition.Y);
gridDataMap[selectedGrid].RowSeparators.Sort();
}
UpdateGrid();
}
else if (_columnSeperator && !isDragging)
{
if (!gridDataMap[selectedGrid].ColumnSeparators.Contains(clickPosition.X))
{
gridDataMap[selectedGrid].ColumnSeparators.Add(clickPosition.X);
gridDataMap[selectedGrid].ColumnSeparators.Sort();
}
UpdateGrid();
}
}

private void UpdateGrid()
{
if (selectedGrid == null)
return;

selectedGrid.RowDefinitions.Clear();
selectedGrid.ColumnDefinitions.Clear();

double previousY = 0;
foreach (var separator in gridDataMap[selectedGrid].RowSeparators)
{
selectedGrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(separator - previousY, GridUnitType.Pixel) });
previousY = separator;
}
selectedGrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(selectedGrid.ActualHeight - previousY, GridUnitType.Pixel) });

double previousX = 0;
foreach (var separator in gridDataMap[selectedGrid].ColumnSeparators)
{
selectedGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(separator - previousX, GridUnitType.Pixel) });
previousX = separator;
}
selectedGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(selectedGrid.ActualWidth - previousX, GridUnitType.Pixel) });

//resizeThumb.Margin = new Thickness(100,100,0,0);
//Grid.SetZIndex(resizeThumb, 1000);
// selectedGrid.UpdateLayout();

for (int row = 0; row < selectedGrid.RowDefinitions.Count; row++)
{
for (int column = 0; column < selectedGrid.ColumnDefinitions.Count;  column++)
{
AddGridCell(selectedGrid, row, column);
}
}

}

private void AddGridCell(Grid grid, int row, int column)
{
var cellBorder = new Border
{
BorderBrush = Brushes.Blue,
BorderThickness = new Thickness(0.5),
Background = Brushes.Transparent
};

Grid.SetRow(cellBorder, row);
Grid.SetColumn(cellBorder, column);
cellBorder.MouseLeftButtonDown += CellBorder_MouseLeftButtonDown;
cellBorder.MouseMove += CellBorder_MouseMove;
cellBorder.MouseLeftButtonUp += CellBorder_MouseLeftButtonUp;
grid.Children.Add(cellBorder);
}

private void btnColumnSeperator_Click(object sender, RoutedEventArgs e)
{
gridGenerator = false;
_columnSeperator = !_columnSeperator;
_rowSeperator = false;
}

private void btnRowSeperator_Click(object sender, RoutedEventArgs e)
{
gridGenerator = false;
_rowSeperator = !_rowSeperator;
_columnSeperator = false;
}
Вывод:
Перед добавлением разделителя:
Изображение

После добавления разделителей:
Изображение
/п>

Подробнее здесь: https://stackoverflow.com/questions/786 ... inition-is

Вернуться в «C#»