2015-10-14 1 views
1

Je voulais rendre toute ligne de la grille à l'intérieur de la fenêtre du conteneur cliquable. Chaque ligne est un contrôle utilisateur appelé "MyBookControl". lorsque l'on clique sur userControl, je souhaitais lever la commande "DownloadCommand". J'utilise le modèle mvvm.WPF Cliquez sur userControl

vue conteneur: https://onedrive.live.com/redir?resid=3A8F69A0FB413FA4!124&authkey=!ANdfYAk6f0Vf-8s&v=3&ithint=photo%2cpng

BookControl:

<UserControl x:Name="MyBookControl" /> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition/> 
      <RowDefinition/> 
      <RowDefinition/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 

     <Grid.Style> 
      <Style TargetType="{x:Type Grid}"> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="False"> 
         <Setter Property="Opacity" Value="0.6"></Setter> 
        </Trigger> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Opacity" Value="1"></Setter> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Grid.Style> 

     <Label Grid.Row="0">Title</Label> 
     <Label Grid.Row="1">Author</Label> 
     <Label Grid.Row="2">Description</Label> 

     <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Title}"/> 
     <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Author}"/> 
     <TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Description}"/> 
     <Button Grid.Column="2" Grid.RowSpan="3" Command="{Binding DownloadCommand}" Content="Download" /> 


     <Ellipse Grid.Column="3" 
        Height="20" Width="20" 
        Stroke="Black" 
        StrokeThickness="0.5" 
        HorizontalAlignment="Center" 
        Grid.Row="1" 
        /> 
     <Controls:PieSlice Grid.Column="3" Grid.Row="1" Stroke="Black" Fill="Black" 
          Height="20" Width="20" 
          StartAngle="0" EndAngle="{Binding Percent}" 
          HorizontalAlignment="Center" /> 
    </Grid> 

</UserControl> 
+0

Vous pouvez essayer d'ajouter un 'MouseBinding' à la collection' InputBindings' de votre contrôle: ''. –

+0

Le contrôle de l'utilisateur entier et pas seulement le bouton de téléchargement? –

Répondre

1

Comme je vous comprends, vous voulez construire un panneau réactif pour tenir tous les membres de votre collection à l'intérieur. Vous pouvez essayer d'utiliser un contrôle listView et placer votre contrôle utilisateur en tant que modèle d'élément ListViewItem. Il y a aussi une fonctionnalité sélectionnée sur la maison (ListView). De cette façon, ListView peut être lié à votre viewmodel principal avec un tas d'objets, et chaque connexion d'utilisateur peut ne pas être liée à un seul objet.

 <ListView ItemsSource="{Binding ToYourSourceCollection}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <YourUserControl/> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

Ensuite, vous pouvez construire un behvior qui travaillent autour d'un événement ListView ou tout simplement écouter un changement de propriété sélectionnés.

+0

Un 'ListBox' serait également applicable ici. –