相关疑难解决方法(0)

WPF - FindName不应该返回null

FindName对我来说是坏的:(

如果你是这方面的专家,我会很乐意帮助你.

我正在寻找的对象就在那里.我有证据.

这是场景:

ToggleButton button = (ToggleButton)sender;
Popup popup = (Popup)button.FindName("popSelectIteration");
Run Code Online (Sandbox Code Playgroud)

popup是null但不总是.只是有时候.但即使它被设置为null,我正在寻找的孩子也在那里.

当它为null时我给了一个断点并抓住了这两个截图.

FindName为"popSelectIteration"返回null的位置:

alt text http://img175.imageshack.us/img175/2055/popupisnull.png

但如果你深入了解手表,就会发现孩子在那里:

替代文字http://img708.imageshack.us/img708/8757/watchwithpopupnull.png

那我错过了什么?为什么FindName找不到它?从屏幕截图中可以看出,这不是计时问题(FindName监视为空但直接路径很好).

有没有更好的方法来找到一个控件?

旁注:如果您在XAML中对有问题的切换按钮感兴趣,可以在这个问题中找到它:WPF - FrameworkElement - 枚举所有后代?.


更新:我做了一些挖掘,看看为什么这会失败一段时间,有时却失败了.我有一个调用的动画NameScope.SetNameScope((DependencyObject)form, new NameScope());(这里是完整的方法代码).在该调用之后,FindName开始失败.

我真的不明白这个电话.我想我复制并粘贴了代码.无论如何,我评论了它.但我很想知道为什么会失败.

c# wpf findname

33
推荐指数
4
解决办法
3万
查看次数

如何在WPF应用程序中生成FlowDocument的"打印预览"?

我的各种WPF应用程序显示FlowDocument的.我可以使用打印WPF FlowDocument 的答案中描述的方法打印它们.

现在我想添加一个"打印预览"功能.在正常情况下,我正在打印窗口中显示的FlowDocument,因此我不需要打印预览.但在某些情况下,要打印的FlowDocument是在内存中即时构建的.在这些情况下,我想在打印前显示它.

现在,我当然可以弹出一个新窗口并显示FlowDocument,但是

  1. 我希望预览真的感觉它是打印操作的一部分,而不仅仅是应用程序中的另一个窗口.

  2. 我不想在FlowDocumentScrollViewer中使用普通的FlowDocument.它不是"任何大小",而是需要约束纸张的大小,特定的HxW比率和分页.

建议?

  • 我应该只使用标准窗口,在这种情况下,如何确保FlowDocument处于适当的比例?

  • 是否有更"集成"的方式在Windows的PrintDialog UI范围内进行预览?

谢谢

.net printing wpf flowdocument flowdocumentscrollviewer

15
推荐指数
1
解决办法
3万
查看次数

打印WPF的对话框和打印预览对话框

是否有WPF的打印对话框,在WPF中打印预览对话框,如Google Chrome或Word?

就像Google Chrome一样.

此时我使用Windows窗体中的打印预览对话框.我也尝试使用它的WPF版本.但WPF没有PrintPreviewDialogPrintPrewiewControl.这是我的代码:

//To the top of my class file:
using Forms = System.Windows.Forms;

//in a methode on the same class:
PageSettings setting = new PageSettings();
setting.Landscape = true;

_document = new PrintDocument();
_document.PrintPage += _document_PrintPage;
_document.DefaultPageSettings = setting ;

Forms.PrintPreviewDialog printDlg = new Forms.PrintPreviewDialog();
printDlg.Document = _document;
printDlg.Height = 500;
printDlg.Width = 200;

try
{
    if (printDlg.ShowDialog() == Forms.DialogResult.OK)
    {
        _document.Print();
    }
}
catch (InvalidPrinterException)
{
    MessageBox.Show("No printers found.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
Run Code Online (Sandbox Code Playgroud)

我也搜索了一个NuGet包,但没有发现真的很好.

c# printing wpf xaml print-preview

11
推荐指数
1
解决办法
3万
查看次数