我正在wpf中重建我的vb6應用程序,該應用程序自2011年以來完美運行。 我的應用程序處理11個文檔。在vb6中,我使用了MDI中的11個表單。FrameworkElement方法在從XAML調用時不繪製網格 - 但是從Window_loaded中執行
在wpf中我使用了一個我稱之爲「保持」的畫布。這個畫布包含我稱爲Doc的FrameworkElement的11個實例。
Doc具有繪製我稱爲Cell的類的形狀和文本的方法。 爲了將單元格放置在Doc中,需要Doc繪製網格。爲此我有一個布爾字段(布爾_showGrid;)如果真正的Doc繪製網格。
我的問題是,從xaml調用時,Doc FrameworkElement不繪製網格。但從Window_Loaded它的確如此。
這是文件FrameworkElement的的一部分:
public class Doc : FrameworkElement
{
VisualCollection paper;
DrawingVisual cellMaker;
bool _showGrid;
public Doc()
{
paper = new VisualCollection(this);
//SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased);
}
public bool showGrid
{
set
{
_showGrid = value;
if (_showGrid)
{
drawGrid();
}
}
}
private void drawGrid()
{
DrawingVisual grid = new DrawingVisual();
using(DrawingContext dc = grid.RenderOpen())
{
for(int i = 0; i <= Width; i += 18)
{
dc.DrawLine(new Pen(Brushes.OrangeRed, 1), new Point(i, 0), new Point(i, Height));
}
for(int j = 0; j <= Height; j += 18)
{
dc.DrawLine(new Pen(Brushes.OrangeRed, 1), new Point(0, j), new Point(Width, j));
}
dc.Close();
}
paper.Add(grid);
}
而這正是文檔的documentsReceipt例如在showGrid創建設置爲true,巫不工作XAML:
<ScrollViewer Grid.Row="1" Grid.Column="0">
<Canvas Name="Hold" Width="21cm" Height="29.7cm" Background="White" Margin="17">
<dc:Doc Name="documentsReceipt"
Width="{Binding Path=ActualWidth,ElementName=Hold}"
Height="{Binding Path=ActualHeight,ElementName=Hold}"
showGrid="True"
Loaded="documentsReceipt_Loaded">
</dc:Doc>
<TextBox Name="txt"
TextChanged="txt_TextChanged"
KeyDown="txt_KeyDown"
PreviewKeyDown="txt_PreviewKeyDown"/>
</Canvas>
</ScrollViewer>
這是當我忽略documentReceipt=true
從Window_Loaded
這就是輸出的時候我能showGrid Window with grid