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开始失败.
我真的不明白这个电话.我想我复制并粘贴了代码.无论如何,我评论了它.但我很想知道为什么会失败.
我的各种WPF应用程序显示FlowDocument的.我可以使用打印WPF FlowDocument 的答案中描述的方法打印它们.
现在我想添加一个"打印预览"功能.在正常情况下,我正在打印窗口中显示的FlowDocument,因此我不需要打印预览.但在某些情况下,要打印的FlowDocument是在内存中即时构建的.在这些情况下,我想在打印前显示它.
现在,我当然可以弹出一个新窗口并显示FlowDocument,但是
我希望预览真的感觉它是打印操作的一部分,而不仅仅是应用程序中的另一个窗口.
我不想在FlowDocumentScrollViewer中使用普通的FlowDocument.它不是"任何大小",而是需要约束纸张的大小,特定的HxW比率和分页.
建议?
我应该只使用标准窗口,在这种情况下,如何确保FlowDocument处于适当的比例?
是否有更"集成"的方式在Windows的PrintDialog UI范围内进行预览?
谢谢
是否有WPF的打印对话框,在WPF中打印预览对话框,如Google Chrome或Word?
此时我使用Windows窗体中的打印预览对话框.我也尝试使用它的WPF版本.但WPF没有PrintPreviewDialog或PrintPrewiewControl.这是我的代码:
//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包,但没有发现真的很好.