XAML получит новую ширину и высоту для Canvas - PullRequest
1 голос
/ 12 марта 2010

Я много раз искал, но раньше этого не видел. Вероятно, действительно простой вопрос, но я не могу обернуть голову вокруг него.

Написал надстройку VSTO для Excel, которая динамически рисует сетку. Затем запускает новое окно и заменяет содержимое холста сгенерированной сеткой. Проблема с печатью. Когда я вызываю процедуру печати, возвращаемые canvas.height и canvas.width являются старым значением до его замены сеткой.

Пример:

string="<Grid Name=\"CanvasGrid\"  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">..Lots of stuff..</Grid>";

// Launch new window and replace the Canvas element

WpfUserControl newWindow = new WpfUserControl();                            
newWindow.Show();


//To test
MessageBox.Show(myCanvas.ActualWidth.ToString());
//return 894
Grid testGrid = myCanvas.FindName("CanvasGrid") as Grid;
MessageBox.Show("Grid " + testGrid.ActualWidth.ToString());
//return 234


StringReader stringReader = new StringReader(LssAllcChrt);
XmlReader xmlReader = XmlReader.Create(stringReader);

Canvas myCanvas = newWindow.FindName("GrphCnvs") as Canvas;
myCanvas.Children.Clear();
myCanvas.Children.Add((UIElement)XamlReader.Load(xmlReader));

//To test
MessageBox.Show(myCanvas.ActualWidth.ToString());
//return 894 but should be much larger the Grid spans all three of my screens
Grid testGrid = myCanvas.FindName("CanvasGrid") as Grid;
MessageBox.Show("Grid " + testGrid.ActualWidth.ToString());
//return 234 but should be much larger the Grid spans all three of my screens

//Run code from WpfUserControl.cs after it loads from button click
Grid testGrid = canvas.FindName("CanvasGrid") as Grid;
MessageBox.Show("Grid " + testGrid.ActualWidth.ToString());
//return 234 but should be much larger the Grid spans all three of my screens

Так что, в принципе, я не могу сказать, каковы мои новые ширина и высота.

1 Ответ

0 голосов
/ 25 марта 2010

Хорошо, вот что я сделал, чтобы исправить проблему.

По сути, я хотел напечатать созданную мной сетку, если она выходила из визуальных связей. Я изменил новое окно на TabControl и TabItems, потому что это было новое требование (Да, я (сарказм)). Итак, я сделал ссылку на выбранный элемент TabItem, ссылку на ScrollViewer как единственное содержимое в tabitem и ссылку на Grid как FrameworkElement:

TabItem ti = GBtabControl.SelectedItem as TabItem;
ScrollViewer sc = ti.Content as ScrollViewer;
FrameworkElement element = sc.Content as FrameworkElement;

Элемент дает правильную ширину и высоту, и теперь я могу печатать и экспортировать диаграмму в виде файла png.

Спасибо за поддержку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...