2009-10-23 7 views
3

J'ai un FlowDocument dans WPF qui ressemble à ceci:élément périodique databound dans WPF FlowDocument

<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Paragraph FontFamily="Georgia"> 
     <StackPanel> 
      <TextBlock Text="{Binding Path=Title}"/> 
      <TextBlock Text="{Binding Path=AssignedTo}"/> 
     </StackPanel> 
    </Paragraph> 
</FlowDocument> 

au lieu de donner la DataContext une classe avec la propriété Titre et AssignedTo, je voudrais donner une liste de cette classe et avoir le flowdocument montrent chacun d'eux des objets. Quelqu'un peut-il me dire comment former le XAML dans le flowdocument pour le faire?

+0

On dirait un double de [cette question ] (http://stackoverflow.com/questions/1254633/is-there-an-itemscontrol-equivalent-for-text-content/1258900#1258900) –

Répondre

8

Qui sait, peut-être aussi simple que l'échantillon de code suivant fonctionnera pour vous, Ajma:

<Window x:Class="WpfTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:WpfTest="clr-namespace:WpfTest" 
    xmlns:System="clr-namespace:System;assembly=mscorlib" 
    xmlns:Collections="clr-namespace:System.Collections;assembly=mscorlib" 
    Title="Bound Inlines Sample" Height="300" Width="300"> 
    <Window.Resources> 
    <Collections:ArrayList x:Key="array"> 
     <System:String>Hello</System:String> 
     <System:String>World</System:String> 
     <System:String>!</System:String> 
    </Collections:ArrayList> 
    </Window.Resources> 
    <Grid> 
    <FlowDocumentReader> 
     <FlowDocument> 
     <Paragraph FontFamily="Georgia"> 
      <ItemsControl ItemsSource="{StaticResource array}"/>    
     </Paragraph> 
     </FlowDocument> 
    </FlowDocumentReader> 
    </Grid> 
</Window> 

Si ce n'est pas, vous pouvez toujours créer votre propre propriété ci-joint et faire tout ce que vous pouvez imaginer l'intérieur de la propriété a changé notification. Voici un petit échantillon avec contrôle Span:

CS:

public class SpanOperations : DependencyObject 
{ 
    public static IEnumerable GetInlineSource(DependencyObject obj) 
    { 
    return (IEnumerable)obj.GetValue(InlineSourceProperty); 
    } 

    public static void SetInlineSource(DependencyObject obj, IEnumerable value) 
    { 
    obj.SetValue(InlineSourceProperty, value); 
    } 

    public static readonly DependencyProperty InlineSourceProperty = 
     DependencyProperty.RegisterAttached("InlineSource", typeof(IEnumerable), typeof(SpanOperations), new UIPropertyMetadata(null, OnInlineSourceChanged)); 

    private static void OnInlineSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
    var span = d as Span; 
    if (span == null) 
    { 
     // It's a demo only. Can work with only spans... 
     return; 
    } 
    span.Inlines.Clear(); 

    var inlines = e.NewValue as IEnumerable; 
    if (inlines != null) 
    { 
     foreach (var inline in inlines) 
     { 
     // We assume only inlines will come in collection: 
     span.Inlines.Add(inline as Inline); 
     } 

    } 
    } 
} 

XAML

<Window x:Class="WpfTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:WpfTest="clr-namespace:WpfTest" 
    xmlns:Collections="clr-namespace:System.Collections;assembly=mscorlib" 
    Title="Bound Inlines Sample" Height="300" Width="300"> 
    <Window.Resources> 
    <Collections:ArrayList x:Key="array"> 
     <Run>Hello</Run> 
     <LineBreak/> 
     <Run>Hello</Run> 
     <LineBreak/> 
     <Bold> 
     <Run>Hello</Run> 
     </Bold> 
    </Collections:ArrayList> 
    </Window.Resources> 
    <Grid> 
    <FlowDocumentReader> 
     <FlowDocument> 
     <Paragraph FontFamily="Georgia"> 
      <Span WpfTest:SpanOperations.InlineSource="{Binding Source={StaticResource array}}"/> 
     </Paragraph> 
     </FlowDocument> 
    </FlowDocumentReader> 
    </Grid> 
</Window> 

Hope this helps :)

+0

Règle des propriétés attachées, bonne réponse Andrey! –