Penso di avere un obiettivo piuttosto semplice ma non riesco a raggiungerlo.ItemsControl con intestazione statica
Tutto ciò che voglio ottenere è disporre di un oggetto ItemsControl (perché non desidero la funzionalità di selezione di un elenco) con un'intestazione. Preferibilmente un'intestazione statica.
Attualmente sto usando una griglia per l'intestazione e quindi copio quella griglia in ItemTemplate (DataTemple) di ItemsControl e quindi li posiziono uno sopra l'altro in una griglia. Funziona un po 'ma non sempre si allinea bene ecc.
Ho quindi trovato il HeaderedItemsControl che ho pensato fosse un'idea geniale ma non riesco a farlo funzionare, semplicemente non mostra affatto l'intestazione. Ho provato quanto segue;
- Appena immissione del testo in "Intestazione" del Xaml
- Posizionando una griglia con TextBlocks con testo statico all'interno del tag ItemsControl.Header
- Posizionamento della griglia all'interno HeaderTemplate (DataTemplate) e vincolante per un oggetto semplice
Sto facendo tutto questo in Blend in un piccolo progetto prima di spostarlo nell'app di produzione e sto solo utilizzando una semplice fonte di dati di esempio che ho creato.
Potrei mancare completamente la barca qui, ma qualsiasi aiuto sarebbe apprezzato.
Il mio codice attuale è la seguente, prima è il mio HeaderedItemsControl
<HeaderedItemsControl Header="HeaderedItemsControl"
ItemsSource="{Binding Collection, Mode=Default}"
ItemTemplate="{DynamicResource ItemsControlDataTemplate}"
HeaderTemplate="{DynamicResource ItemsControlHeaderDataTemplate}"/>
poi ho un ItemTemple che funziona come previsto
<DataTemplate x:Key="ItemsControlDataTemplate">
<Grid d:DesignWidth="268">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.754*"/>
<ColumnDefinition Width="0.246*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Property1, Mode=Default}" TextWrapping="Wrap" d:LayoutOverrides="Height" HorizontalAlignment="Stretch" Margin="0" />
<TextBlock Text="{Binding Property2, Mode=Default}" TextWrapping="Wrap" d:LayoutOverrides="Height" Grid.Column="1" HorizontalAlignment="Left" Margin="0" />
</Grid>
</DataTemplate>
e poi il colpo di testa che viene con aria di sfida oppone il suo lavoro etica, l'ho provato con binding e con solo testo nella proprietà TextBlock.Text
<DataTemplate x:Key="ItemsControlHeaderDataTemplate">
<Grid d:DesignWidth="268">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.754*"/>
<ColumnDefinition Width="0.246*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Header.Header1, Mode=Default, Source={StaticResource SampleDataSource6}}" TextWrapping="Wrap" HorizontalAlignment="Stretch" Margin="0"/>
<TextBlock Text="{Binding Header.Header2, Mode=Default, Source={StaticResource SampleDataSource6}}" TextWrapping="Wrap" d:LayoutOverrides="Height" Grid.Column="1" HorizontalAlignment="Left" Margin="0"/>
</Grid>
</DataTemplate>
Grazie signore, la vostra risposta mi ha davvero aiutato. Alla fine ho creato uno stile per HeaderedItemsControl e aggiunto ContentPresenter come suggerito con ContentSource = l'attributo header. In questo modo posso usarlo su tutti gli ItemsControl all'interno dell'app e aggiungere semplicemente una griglia con TextBlock nel tag HeaderedItemsControl.Header. wrt il tuo suggerimento sulla condivisione Grid Size, lo testerò ma non sono sicuro che funzionerà come l'una griglia è nel DataTemplate e l'altra sarà nell'intestazione del ItemsControl ma la testerò e darò un feedback –