WPF и холст - PullRequest
       33

WPF и холст

1 голос
/ 02 ноября 2009

У меня есть сетка, которая представляет некоторые данные, и мне нужен холст, чтобы наложить поверх него, чтобы расположить некоторые строки. Холст внутри своего пользовательского контроля

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

Я добавил холст внутри окна просмотра, но это не сработало. Когда сетка меняет размер, холст нет. Цель холста - наложить функциональность, подобную линейке, поверх сетки.

Я не могу использовать стиль в сетке для замены холста, потому что сетка показывает другую информацию, чем холст. Думайте об этом как о графике, на котором есть столбцы столбцов разных размеров (в моем случае сетка), а дни - это линии в наложении (как диаграмма Ганта)

Мой код:

taxCanvas = new TimeAxis();
Grid.SetRowSpan(taxCanvas, GRightMain.RowDefinitions.Count);
Grid.SetColumnSpan(taxCanvas, GRightMain.ColumnDefinitions.Count);
Grid.SetColumn(taxCanvas, 0);    Grid.SetRow(taxCanvas, 0); 
Grid.SetZIndex(taxCanvas, -1);
taxCanvas.Height = GRight.ActualHeight;
taxCanvas.Width = GRight.ActualWidth;
GRightMain.Children.Add(taxCanvas);

TimeAxis - это мой пользовательский контроль на холсте, GRightMain - это сетка, в которой и мой холст, и сетка содержат содержимое (Gright) в одной строке и столбце.

Ответы [ 2 ]

1 голос
/ 02 ноября 2009

Непосредственной причиной вашей проблемы являются строки:

taxCanvas.Height = GRight.ActualHeight;
taxCanvas.Width = GRight.ActualWidth;

Устанавливает фиксированный размер для элемента управления TimeAxis, отключая любое автоматическое изменение размера.

Если ваш пользовательский элемент управления TimeAxis не имеет внутренних настроек, влияющих на показатель, замена настроек высоты и ширины на следующие должна привести к автоматическому изменению размера UserControl.

taxCanvas.HorizontalAlignment = HorizontalAlignment.Stretch;
taxCanvas.VerticalAlignment = VerticalAlignment.Stretch;

Однако это может не полностью решить вашу проблему; требуемый размер и размер макета вашего UserControl будет таким же, как у сетки, но вам все равно придется вручную изменять размеры объектов на холсте. У Canvas нет никаких условий для измерения / аранжировки, поэтому вам придется обрабатывать это с помощью кода. Общие методы:

  1. Обертывание Canvas внутри ViewBox, которое вы уже пробовали. Вы можете попробовать это снова с измененными выше линиями.
  2. Настройка RenderTransform холста с использованием кода или привязок (более эффективно, чем настройка LayoutTransform, и Canvas в любом случае не участвует в макете)
  3. Настройка отдельных позиций формы с помощью кода или привязок

Один момент, на который стоит обратить внимание: когда вы изменяете размер холста, его содержимое не изменяется. Поэтому, если вы хотите узнать, действительно ли размер вашего холста изменяется, задайте ему цвет фона. Таким образом, вы не будете тратить время на поиск неправильного места для определения размера.

0 голосов
/ 02 ноября 2009

Ваш элемент управления GRightMail является сеткой, которая по умолчанию растягивает свое содержимое. Если ваши данные и элемент управления TimeAxis находятся в одной и той же ячейке сетки (и в одном и том же диапазоне строк / столбцов), они должны растягиваться вместе.

Если это все еще не так, то убедитесь, что у TimeAxis нет фиксированной ширины или высоты или определенного горизонтального / вертикального выравнивания.

...