ListView: definieren ItemsPanelTemplate im Ressourcen-dictionary
Ich habe ein ListView, das layout sieht aus wie ein Windows-Explorer-Ansicht (Symbol + einige details), gebunden eine Liste irgendwo im ViewModel.
Mein Ziel hier können Sie Umschalten zwischen der explorer-Ansicht oder der klassischen Ansicht, Wann immer wir wollen.
Ich definieren könnte, eine ItemsPanelTemplate
genau das tun, die Arbeit ordnungsgemäß angezeigt wird, das layout, die direkt in die ListView.ItemsPanel
Feld. Nun, würde ich mag, Sie zu definieren, in der die Ressourcen so, dass ich in der Lage, es zu benutzen, in verschiedenen Ansichten, insbesondere in einem Steuergerät, der Benutzer sollte die Wahl haben zwischen der Explorer-Ansicht oder der klassischen Listen-Ansicht (Standard-rendering für eine Liste)
Wie würden Sie das tun? Ich kann nicht definieren, jeder ItemsPanelTemplate
in meinem ResourceDictionary
, und wenn ich definieren DataTemplate
es ist nicht kompatibel (und ich dachte, dass nach der reinen Logik, ItemsPanelTemplate
Erben sollen von DataTemplate
, aber es ist eigentlich nicht Aussehen wie so).
Code-snippet für die aktuelle Liste:
<ListView SelectionMode="Single"
VerticalAlignment="Stretch" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Bottom"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ItemsSource="{Binding ListUserApps,
UpdateSourceTrigger=PropertyChanged}"
SelectedIndex="{Binding SelectedUserApp, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Background="White">
<ListView.ItemsPanel>
<ItemsPanelTemplate >
<WrapPanel Width="{Binding (FrameworkElement.ActualWidth),
RelativeSource={RelativeSource
AncestorType=ScrollContentPresenter}}"
ItemWidth="{Binding (ListView.View).ItemWidth,
RelativeSource={RelativeSource AncestorType=ListView}}"
ItemHeight="{Binding (ListView.View).ItemHeight,
RelativeSource={RelativeSource AncestorType=ListView}}" />
<!--MinWidth="{Binding ItemWidth,
RelativeSource={RelativeSource Self}}"-->
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Height="Auto" Width="150">
<Image Source="{Binding Path=Appli.AppType, Converter={StaticResource TypeToIconConverter}}" Margin="5"
Height="50" Width="50"/>
<StackPanel VerticalAlignment="Center" Width="90">
<TextBlock Text="{Binding Path=Appli.AppName}"
FontSize="13" HorizontalAlignment="Left" TextWrapping="WrapWithOverflow"
Margin="0,0,0,1" />
<TextBlock Text="{Binding Path=Appli.AppType}" FontSize="9"
HorizontalAlignment="Left" Margin="0,0,0,1" />
</StackPanel>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Halten die ItemTemplate
in eine statische Ressource war einfach zu tun, aber jetzt kann ich nichts mit der ItemsPanelTemplate
...
Irgendwelche Ideen? Ich bin mit MVVM, so versuche ich im Idealfall nicht um die code-behind-wenn möglich
Du musst angemeldet sein, um einen Kommentar abzugeben.
verwenden Sie einen Stil für das ganze ListView für die.
so dass Sie tun würde:
wenn Sie möchten, dass der Benutzer dann in der Lage sein, zum Umschalten zwischen explorer und die classic-Ansicht, so definieren Sie einen zweiten Stil und style wechseln von der Listenansicht angezeigt werden. Dies kann zum Beispiel geschehen, mit einigen VisualStates und ein 'DataStateBehavior'.
Alternativ können Sie einen style erstellen, mit einigen DataTriggers und Setter für die einzelnen ItemsPanels.
ListView.GroupStyle
in einen vordefinierten Stil. Es sollte eigentlich ein nur-lese-Eigenschaft und ich weiss nicht, wie es zu definieren ist. Irgendeine Idee?