私はこのコントロールHereを使用して、リストにバインドしてそれに応じて行を生成することができますが、それは本当にうまくいっていますが、テーブルは印刷時に表示されません。 XPSやPDFファイルは、FlowDocumentに表示されますが、空白として印刷されます。バックグラウンドとフォアグラウンドの色を、何の提案もなしに変更しようとしましたか?WYSIWYGただし、印刷しない場合
0
A
答えて
0
私はちょうどその例(Create Flexible UIs With Flow Documents And Data Binding)を実装して、あなたと同じ問題を経験しました。
BindableRun
のDataContext
が正しく設定されていないという問題がありました。 (FixupDataContext
ヘルパーメソッドを使用して)コンテキストを修正する必要がある記事で説明したように、FrameworkContentElement
にはDataContext
を設定し、以前は固定されたコンテキストをクリアします(UnFixupDataContext
ヘルパーメソッドを使用)。 これらの命令の実行順序は重要ですです。記事をもう一度読んで理解していることを確認してください。私はそれを何度か読み直し、彼が何を話しているかを本当に理解するためのコードを研究しなければなりませんでした。
私は実装を一歩前進させ、TableCell
の他の要素をバインドするデータのサポートを追加しました。この変更には、添付プロパティを使用してDataContext
が 'fixed'の要素を識別してから、FrameworkContentElements
に加えてFrameworkElements
に対しても機能するようにヘルパーメソッドを展開します。
HTH、
編集:
public static class DataContextHelper
{
#region UseAncestorDataContext
public static readonly DependencyProperty UseAncestorDataContextProperty = DependencyProperty.RegisterAttached("UseAncestorDataContext", typeof(bool), typeof(DataContextHelper),
new FrameworkPropertyMetadata(false, DataContextHelper.OnUseAncestorDataContextChanged));
public static bool GetUseAncestorDataContext(DependencyObject d)
{
return (bool)d.GetValue(UseAncestorDataContextProperty);
}
public static void SetUseAncestorDataContext(DependencyObject d, bool value)
{
d.SetValue(UseAncestorDataContextProperty, value);
}
private static void OnUseAncestorDataContextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if ((bool)e.NewValue)
UseAncestorDataContext(d);
}
#endregion
/// <summary>
/// If you use a Bindable flow document element more than once, you may encounter a "Collection was modified"
/// exception. The error occurs when the binding is updated because of a change to an inherited dependency
/// property. The most common scenario is when the inherited DataContext changes. It appears that an inherited
/// properly like DataContext is propagated to its descendants. When the enumeration of descendants gets to
/// a Bindable, the dependency properties of that element change according to the new DataContext, which change
/// the (non-dependency) properties. However, for some reason, changing the flow content invalidates the enumeration
/// and raises an exception.
/// </summary>
public static void UseAncestorDataContext(DependencyObject element)
{
if (element is FrameworkContentElement)
{
FrameworkContentElement contentElement = (FrameworkContentElement)element;
Binding binding = new Binding(FrameworkContentElement.DataContextProperty.Name);
binding.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(FrameworkElement), 1);
contentElement.SetBinding(FrameworkContentElement.DataContextProperty, binding);
}
else if (element is FrameworkElement)
{
FrameworkElement frameworkElement = (FrameworkElement)element;
Binding binding = new Binding(FrameworkElement.DataContextProperty.Name);
binding.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(FrameworkElement), 1);
frameworkElement.SetBinding(FrameworkContentElement.DataContextProperty, binding);
}
}
public static void ClearDataContextBinding(DependencyObject d)
{
while (RestoreDataContextRecursive(d));
}
private static bool RestoreDataContextRecursive(DependencyObject d)
{
if (d is FrameworkContentElement && GetUseAncestorDataContext(d))
{
Binding binding = BindingOperations.GetBinding(d, FrameworkContentElement.DataContextProperty);
if (binding != null && binding.Path != null && binding.Path.Path == FrameworkContentElement.DataContextProperty.Name
&& binding.RelativeSource != null && binding.RelativeSource.Mode == RelativeSourceMode.FindAncestor && binding.RelativeSource.AncestorType == typeof(FrameworkElement) && binding.RelativeSource.AncestorLevel == 1)
{
BindingOperations.ClearBinding(d, FrameworkContentElement.DataContextProperty);
return true;
}
}
else if (d is FrameworkElement && GetUseAncestorDataContext(d))
{
Binding binding = BindingOperations.GetBinding(d, FrameworkElement.DataContextProperty);
if (binding != null && binding.Path != null && binding.Path.Path == FrameworkElement.DataContextProperty.Name
&& binding.RelativeSource != null && binding.RelativeSource.Mode == RelativeSourceMode.FindAncestor && binding.RelativeSource.AncestorType == typeof(FrameworkElement) && binding.RelativeSource.AncestorLevel == 1)
{
BindingOperations.ClearBinding(d, FrameworkElement.DataContextProperty);
return true;
}
}
// As soon as we have disconnected a binding, return. Don't continue the enumeration, since the collection may have changed
foreach (object child in LogicalTreeHelper.GetChildren(d))
{
if (child is DependencyObject && RestoreDataContextRecursive((DependencyObject)child))
return true;
}
return false;
}
}
使用
<DataTemplate x:Key="PercentCellTemplate">
<documents:ContentFragment>
<TableCell Style="{StaticResource TableCellStyle}" BorderThickness="0,0,1,0">
<Paragraph>
<Rectangle Width="14" Height="14" VerticalAlignment="Center" Margin="0,6,0,0" Fill="{Binding Path=Result, Mode=OneWay, Converter={StaticResource MappingConverterResultEnumToIconResource}}"
documents:DataContextHelper.UseAncestorDataContext="True"/>
<documents:DocumentRun Style="{StaticResource ReportDocument_NormalRunStyle}" Text="{Binding Path=Percent, Mode=OneWay, StringFormat={}{0:0.000}%}"
BaselineAlignment="Center" documents:DataContextHelper.UseAncestorDataContext="True" />
</Paragraph>
</TableCell>
</documents:ContentFragment>
</DataTemplate>
関連する問題
- 1. count(data)が4以下の場合は、印刷してください。そうでない場合は2つ印刷してください。
- 2. 印刷したい印刷
- 3. 作業結果が印刷された場合の印刷方法 - はい、そうでない場合はエラー
- 4. 私は以下のパターンを印刷したい場合は、パターン
- 5. statement whileループが正しく印刷されない場合
- 6. 商品が見つからない場合には印刷したい
- 7. sbtビルドでのval/valの印刷方法は?私たちは印刷したい場合は
- 8. 一致が見つかった場合はヘッダーを印刷し、そうでない場合はヘッダーを印刷しません。
- 9. 値がnullかどうかを確認し、値がnullの場合は、何も印刷しない、そうでない場合は印刷する。助けて?
- 10. 印刷プレビューCSS、ただしブラウザ内
- 11. CMakeLists.txt:ctestが失敗した場合のメッセージの印刷方法
- 12. 何も印刷しないので、nilの場合は印刷されません - iOS
- 13. 印刷「なし」
- 14. チェックボックスをオフにした場合と空白( "、")で分割した場合の空白の印刷方法
- 15. オブジェクト印刷する場合はJavaScript
- 16. Pythonの印刷 - ループの場合
- 17. テキストフィールドに200を書き込む場合ラベルにokを印刷したい
- 18. どのクラスC#私は M2Kを印刷したい。この場合
- 19. DPIが150%の場合、フォームが正しく印刷されない
- 20. 印刷する端末がない場合、Djangoは何をしますか?
- 21. 「プリンタなし」オプションが選択されている場合の印刷の問題
- 22. rmarkdown beamer presentation:スライドを印刷しないでください。
- 23. コンソールでメッセージ401(Unauthorized)を印刷しないでください。
- 24. 「前回の印刷行から値が変更された場合にのみ印刷します」
- 25. ウィンドウをクリックした場合に印刷を使用しますか?
- 26. Python印刷なし
- 27. 2つのファイルを結合し、一致しない場合でも各行を印刷します
- 28. 最初の条件が満たされない場合の印刷方法は?
- 29. ウェブで適切な印刷を報告してください
- 30. 刻んだ見積もりを印刷しない方法
あなたも埋没費用に捕捉されない場合、私はそれとして、CSSへの切り替えを、検討します印刷テンプレートを許可します。 –
@Gregory:WPFの 'FlowDocument'でCSSを使うとどうなるか分かりません。 – user7116
どちらかというと、問題の横には本当に混乱しています。どうすればプリンタが私のテーブルを見ることができないのですか?コントロールの中にあり、問題のない他のコントロールを見ることができます – Musaab