none
ListView Allgemeines CellTemplate RRS feed

  • Frage

  • Hallo!

    Ich will den Text in einer Zelle eines ListViews (im GridView-Modus) so skalieren, dass er exakt passt - d.h. dass er nirgends überlappt.
    Das Skalieren ist kein Problem.

    Die ListView hat mehrere Spalten, in jeder wird nur Text angezeigt (also keine Bilder o.ä.), und wirklich jede Zelle soll skaliert werden.
    Dargestellt werden Daten-Einträge mit den String-Eigenschaften A, B, C, D, E, F und G.

    Die Lösung ist also ein CellTemplate - das Problem ist aber, dass das CellTemplate nur für jede Spalte festgelegt werden kann, und wenn unterschiedliche Daten gebunden werden sollen, werden auch unterschiedliche CellTemplates benötigt:

    [Code]

    Meine bisherige Lösung ist, dass ich für A, B .. G jeweils ein CellTemplate geschrieben habe - sie unterscheiden sich nur in der Daten-Bindung - also 7 CellTemplates.

    Das erste CellTemplate sieht also so aus:

    [Code]

    Und das zweite nicht viel anders:

    [Code]

    Wie kann das auf ein einziges, allgemeines Template reduziert werden?

    Denn diese 7 Templates bedeuten nur unnötige Wartung, da sie im Grunde genommen gleich sind.

    Vielen Dank für Antworten,
    Henning

    • Bearbeitet Henning Dieterichs Sonntag, 21. November 2010 15:42 Die Code-Beispiele habe ich nicht so verunstaltet!
    Sonntag, 21. November 2010 15:29

Antworten

Alle Antworten

  • Kannst du das Xaml nochmal posten?

     

    Montag, 22. November 2010 09:22
    Beantworter
  • Code1:

          <ListView Grid.Row="3" Grid.Column="1" Margin="10, 0, 0, 0" ItemsSource="{Binding DataSource}" >
            <ListView.View>
              <GridView>
                <GridViewColumn Width="85" Header="A" CellTemplate="{StaticResource ADataTemplate}" />
                <GridViewColumn Width="45" Header="B" CellTemplate="{StaticResource BDataTemplate}" />
                <GridViewColumn Width="130" Header="C" CellTemplate="{StaticResource CDataTemplate}" />
                <GridViewColumn Width="45" Header="D" CellTemplate="{StaticResource DDataTemplate}" /> ...
                <GridViewColumn Width="45" Header="D" CellTemplate="{StaticResource GDataTemplate}" />
              </GridView>
            </ListView.View>
          </ListView >
    
    

     

    Code 2 und 3:

          <DataTemplate x:Key="ADataTemplate">
            <Viewbox Stretch="Uniform" HorizontalAlignment="Left" VerticalAlignment="Stretch" StretchDirection="DownOnly">
              <TextBlock Text="{Binding A}" />
            </Viewbox>
          </DataTemplate>
          <DataTemplate x:Key="BDataTemplate">
            <Viewbox Stretch="Uniform" HorizontalAlignment="Left" VerticalAlignment="Stretch" StretchDirection="DownOnly">
              <TextBlock Text="{Binding B}" />
            </Viewbox>
          </DataTemplate>
          <DataTemplate x:Key="CDataTemplate">
            <Viewbox Stretch="Uniform" HorizontalAlignment="Left" VerticalAlignment="Stretch" StretchDirection="DownOnly">
              <TextBlock Text="{Binding C}" />
            </Viewbox>
          </DataTemplate>

    Montag, 22. November 2010 19:39
  • Probier mal folgendes:
    <GridViewColumn Width="85" Header="A" DisplayMemberBinding="{Binding A}">
      <GridViewColumn.CellTemplate>
        <DataTemplate>
          <Viewbox Stretch="Uniform" 
                HorizontalAlignment="Left" 
                VerticalAlignment="Stretch" 
                StretchDirection="DownOnly">
            <TextBlock Text="{Binding DisplayMemberBinding}" />
          </Viewbox>
        </DataTemplate>
      </GridViewColumn.CellTemplate>
    </GridViewColumn>
    
    Wenn das klappt, kannst du ja das Template auslagern...
    Dienstag, 23. November 2010 13:16
    Beantworter
  • Danke für deine Antwort!

    Aber leider funktioniert das nicht: Ist das DisplayMemberBinding gesetzt, wird das Template ignoriert.

    Freitag, 26. November 2010 16:11
  • Ich glaub in XAML lässt sich das dann nicht lösen...

     

    Montag, 29. November 2010 10:06
    Beantworter