2009-09-21 6 views
0

Dans #WPF, vous avez ItemTemplateSelectors. Mais, pouvez-vous également sélectionner un ItemContainerStyle basé sur le type de données d'un objet lié?Dans WPF, Sélection de ItemContainerStyle en fonction du contenu lié aux données

Je suis databinding un scatterview. Je veux définir certaines propriétés des objets ScatterViewItems générés en fonction de l'objet dans leur DataContext. Un mécanisme similaire à ItemTemplateSelector pour les styles serait génial. Est-ce possible? Je lie maintenant les propriétés dans les objets que j'affiche pour obtenir l'effet, mais cela ressemble à des frais généraux et trop complexe (et surtout, quelque chose que nos concepteurs XU ne peuvent pas faire par eux-mêmes).

Ceci est le code XAML que j'utilise maintenant. Votre aide est grandement appréciée.

 <s:ScatterView x:Name="topicsViewer"> 
    <s:ScatterView.ItemTemplateSelector> 
    <local:TopicViewerDataTemplateSelector> 
    <DataTemplate DataType="{x:Type mvc:S7VideoTopic}"> 
     <Grid> 
     <ContentPresenter Content="{Binding MediaElement}" /> 
     <s:SurfaceButton Visibility="{Binding MailToVisible}" x:Name="mailto" Tag="{Binding Titel}" Click="mailto_Click" HorizontalAlignment="Right" VerticalAlignment="Top" Background="Transparent" Width="62" Height="36"> 
     <Image Source="/Resources/MailTo.png" /> 
     </s:SurfaceButton> 
     <StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Center" Height="32"> 
     <s:SurfaceButton Tag="{Binding MediaElement}" x:Name="btnPlay" Click="btnPlay_Click"> 
     <Image Source="/Resources/control_play.png" /> 
     </s:SurfaceButton> 
     <s:SurfaceButton Tag="{Binding MediaElement}" x:Name="btnPause" Click="btnPause_Click"> 
     <Image Source="/Resources/control_pause.png" /> 
     </s:SurfaceButton> 
     <s:SurfaceButton Tag="{Binding MediaElement}" x:Name="btnStop" Click="btnStop_Click"> 
     <Image Source="/Resources/control_stop.png" /> 
     </s:SurfaceButton> 
     </StackPanel> 
     </Grid> 
    </DataTemplate> 
    <DataTemplate DataType="{x:Type mvc:S7ImageTopic}"> 
     <Grid> 
     <ContentPresenter Content="{Binding Resource}" /> 
     <s:SurfaceButton Visibility="{Binding MailToVisible}" x:Name="mailto" Tag="{Binding Titel}" Click="mailto_Click" HorizontalAlignment="Right" VerticalAlignment="Top" Background="Transparent" Width="62" Height="36"> 
     <Image Source="/Resources/MailTo.png" /> 
     </s:SurfaceButton> 
     </Grid> 
    </DataTemplate> 
    <DataTemplate DataType="{x:Type local:Kassa}"> 
     <ContentPresenter Content="{Binding}" Width="300" Height="355" /> 
    </DataTemplate> 
    </local:TopicViewerDataTemplateSelector> 
    </s:ScatterView.ItemTemplateSelector> 
    <s:ScatterView.ItemContainerStyle> 
    <Style TargetType="s:ScatterViewItem"> 
    <Setter Property="MinWidth" Value="200" /> 
    <Setter Property="MinHeight" Value="150" /> 
    <Setter Property="MaxWidth" Value="800" /> 
    <Setter Property="MaxHeight" Value="700" /> 
    <Setter Property="Width" Value="{Binding DefaultWidth}" /> 
    <Setter Property="Height" Value="{Binding DefaultHeight}" /> 
    <Setter Property="s:ScatterViewItem.CanMove" Value="{Binding CanMove}" /> 
    <Setter Property="s:ScatterViewItem.CanScale" Value="{Binding CanScale}" /> 
    <Setter Property="s:ScatterViewItem.CanRotate" Value="{Binding CanRotate}" /> 
    <Setter Property="Background" Value="Transparent" /> 
    </Style> 
    </s:ScatterView.ItemContainerStyle> 
    </s:ScatterView> 

Bart Roozendaal, Sevensteps

Répondre

1

Comment l'utilisation d'un ItemContainerStyleSelector (duh!) ... Désolé, il y a eu une longue nuit

Questions connexes