我在后台线程中运行以下代码作为STA公寓,在文档查看器中提供打印预览:
// Print Preview
public static void PrintPreview(FixedDocument fixeddocument)
{
MemoryStream ms = new MemoryStream();
using (Package p = Package.Open(ms, FileMode.Create, FileAccess.ReadWrite))
{
Uri u = new Uri("pack://TemporaryPackageUri.xps");
PackageStore.AddPackage(u, p);
XpsDocument doc = new XpsDocument(p, CompressionOption.Maximum, u.AbsoluteUri);
XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(doc);
writer.Write(fixeddocument.DocumentPaginator);
var previewWindow = new Window();
var docViewer = new DocumentViewer();
previewWindow.Content = docViewer;
THIS FAILS ---> docViewer.CommandBindings.Remove(???Print Button???);
FixedDocumentSequence fixedDocumentSequence = doc.GetFixedDocumentSequence();
docViewer.Document = fixedDocumentSequence as IDocumentPaginatorSource;
previewWindow.ShowDialog();
PackageStore.RemovePackage(u);
doc.Close();
}
}
一切运作良好。但是,由于它在自己的线程中运行 - 而不是主线程 - 文档查看器上的打印对话框崩溃。
在代码中,如何删除和/或禁用来自DocumentViewer的“打印”按钮? (我已经阅读了我在Google上可以找到的所有内容,而这一切都在XAML中,并不是很有帮助。)
非常感谢任何帮助。 TIA
更新#1:我能看到的唯一方法是从控件模板中删除“打印”按钮并使用自定义文档查看器。 Document Viewer Style给出了一种可行的风格。
如果我只是从系统文档查看器中删除按钮,那仍然会很好吗?
答案 0 :(得分:0)
使用此答案中的method,您可以像这样以编程方式更改PrintButton的可见性。假设我将方法放在名为UIElementHelper
的类中:
var button = UIElementHelper.FindChild<Button>(docViewer, "PrintButton");
button.Visibility = Visibility.Collapsed;