我正在Silverlight中打印包含多行的網格。 每當網格高度超過PrintableArea時,我將HasMorePages設置爲true並中斷,否則HasMorePages設置爲False。但是,此代碼會導致無限循環,因爲儘管「HasMorePages」爲false,PrintPage事件仍會一次又一次地被調用。雖然HasMorePages爲false,但Silverlight:PrintPage無限循環
private void PrintButton_Click(object sender, RoutedEventArgs e)
{
PrintDocument document = new PrintDocument();
// create a copy of the MDivReq form by calling the constructor with the same parameters
Common.MDivDegreeReq mymdiv = scrllvwr.Content as Common.MDivDegreeReq;
int totalrows =mymdiv.LayoutRoot.RowDefinitions.Count;
document.PrintPage +=(s,args) =>
{
Grid GridToBePrinted = new Grid();
GridToBePrinted.Height = 0;
for (int i = 0; i < mymdiv.LayoutRoot.RowDefinitions.Count; i++)
{
// if GridToBePrinted height + this rows height is less than the PrintableArea heigh
// then add this row to the gridtobeprinted.
if (GridToBePrinted.Height + mymdiv.LayoutRoot.RowDefinitions[i].ActualHeight + 20 < args.PrintableArea.Height)
{
RowDefinition myrow = new RowDefinition();
myrow = mymdiv.LayoutRoot.RowDefinitions[i];
//myrow = mymdiv.LayoutRoot.RowDefinitions[i].MemberwiseClone();
i--;
mymdiv.LayoutRoot.RowDefinitions.Remove(myrow);
GridToBePrinted.RowDefinitions.Add(myrow);
GridToBePrinted.Height += myrow.ActualHeight;
if (mymdiv.LayoutRoot.RowDefinitions.Count == 0)
{
break;
}
args.HasMorePages = false;
}
else
{
if (mymdiv.LayoutRoot.RowDefinitions[i].ActualHeight > args.PrintableArea.Height)
{
mymdiv.LayoutRoot.RowDefinitions.RemoveAt(i);
continue;
}
args.PageVisual = GridToBePrinted;
args.HasMorePages = true;
//i++;
break;
}
}
};
document.Print(mystudent + " - MDiv Requirements");
}
的代碼粘貼如下: 在當所有的mymdiv.LayoutRoot.RowDefinitions.Count = 0,則的PrintPage再次調用,並檢查for循環結束時發現其不符合條件,那麼它會再次進入PrintPage的開始並繼續這樣做。
如何停止此循環?
感謝您的回覆,這不是問題,但我調整了我的代碼與您的建議。 – user3340627
沒問題,我很高興你找到了解決方案 – DNKROZ