locked
Clique sur un usercontrol RRS feed

  • Question

  • Bonjour, (Bon vous l'aurez remarque je Débute, mais je progresse croyez moi)

    J'ai un UserContol :

    <UserControl x:Class="Monappli.ItemFigure"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        x:Name="ItemFigureControl"
        FontFamily="{StaticResource PhoneFontFamilyNormal}"
        FontSize="{StaticResource PhoneFontSizeNormal}"
        Foreground="{StaticResource PhoneForegroundBrush}">
     
        <ListBoxItem>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <Image Grid.Column="0"
                        Source="{Binding Icon}"
                        Height="70"
                        Width="70"
                        Margin="6" />
                <StackPanel Grid.Column="1"  
                            Orientation="Horizontal"
                            VerticalAlignment="Center">
                    <TextBlock Text="{Binding Name}" 
                                Foreground="Black" 
                               Style="{StaticResource PhoneTextTitle2Style}" />
                </StackPanel>
     
            </Grid>
        </ListBoxItem>
    </UserControl>
    

    et le code behind :

    public event EventHandler Click;
     
            public ItemFigure()
            {
                InitializeComponent();
                this.Tap += new EventHandler<GestureEventArgs>(ItemFigure_Tap);
            }
     
            void ItemFigure_Tap(object sender, GestureEventArgs e)
            {
                //throw new NotImplementedException();
                if (Click != null)
                {
                    Click(thisEventArgs.Empty);
                }
            }

    J'utilise ce Usercontrol comme ceci dans  PivotPage.xaml  et jusque là, tout va bien (et merci à plein de gens MVP de ce réseau)

    <!--Élément un de tableau croisé dynamique-->
                <controls:PivotItem Header="Surfaces">
                    <Grid Grid.Row="1" Margin="12,0,12,0">
                        
                        <ScrollViewer>
                            <ItemsControl x:Name="surfaces">
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <local:ItemFigure Click="SurfaceFigure_Click"  />
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                          </ScrollViewer>
                        
                    </Grid>
                </controls:PivotItem>

    Coté ode behind de PivotPage.xaml :

     private void SurfaceFigure_Click(object sender, EventArgs e)
            {
                //ListBox item = (ListBox)sender ;
            }

    1°) Mais arrivé dans cette procédure, j'aimerai récupérer des données propre à l'item cliqué . Je bloque là.

    2°) dès que j'arrive à récupérer des données, comment y passe un ID et le récupérer : Peut on mettre une propriété cachée ?

    Merci de votre aide

    mardi 14 février 2012 14:57

Réponses

  • Mais je vois surtout que tu essaies de réinventer la roue, enfin la listbox :

    <UserControl x:Class="Monappli.ItemFigure"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        x:Name="ItemFigureControl"
        FontFamily="{StaticResource PhoneFontFamilyNormal}"
        FontSize="{StaticResource PhoneFontSizeNormal}"
        Foreground="{StaticResource PhoneForegroundBrush}">
     
       <!-- on vire <ListBoxItem>-->
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <Image Grid.Column="0"
                        Source="{Binding Icon}"
                        Height="70"
                        Width="70"
                        Margin="6" />
                <StackPanel Grid.Column="1"  
                            Orientation="Horizontal"
                            VerticalAlignment="Center">
                    <TextBlock Text="{Binding Name}" 
                                Foreground="Black" 
                               Style="{StaticResource PhoneTextTitle2Style}" />
                </StackPanel>
     
            </Grid>
        <!-- on vire </ListBoxItem> -->
    </UserControl>
    et le code behind :


    public event EventHandler Click;
     
            public ItemFigure()
            {
                InitializeComponent();
              }
     
           }



    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    mardi 14 février 2012 15:22
  • et pour l'utiliser



    <!--Élément un de tableau croisé dynamique-->
                <controls:PivotItem Header="Surfaces">
                     <ListBox Margin="12,0,12,0" x:Name="surfaces" SelectionChanged="surfaces_SelectionChanged">
                                <ListBox.ItemTemplate>
                                    <DataTemplate>
                                        <local:ItemFigure  />
                                    </DataTemplate>
                                </ListBox.ItemTemplate>
                            </ListBox>
                  </controls:PivotItem>




    Coté ode behind de PivotPage.xaml :

    private void surfaces_SelectionChanged(object sender, SelectionChangedEventArgs e){
    if(e.AddedItems.Count==0)
      return;
    var item=e.AddedItems[0] as MonObject;
    MessageBox.Show(item.Icon+"  "+item.Name);
    ((ListBox)sender).SelectedItem=null;
    }


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue


    mardi 14 février 2012 15:22

Toutes les réponses

  • Bonjour,

    La propriété "Tag" (de type objet) que possèdent tous les contrôles héritant de FrameworkElement te permet de stocker n'importe quel type d'information.


    Pour que la discussion puisse être identifiée comme résolue merci de marquer les réponses qui vous ont aidées à solutionner votre problème comme "réponse".

    mardi 14 février 2012 15:10
  • Non dsl Bad, mais y'a le datacontext :D 

    privatevoid SurfaceFigure_Click(object sender, EventArgs e)         {             var item=(sender as FrameworkElement).DataContext as TonObject;

    MessageBox.Show(item.Icon+" "+item.Name);

            }

     


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    mardi 14 février 2012 15:15
  • @Rudy aussi oui, je ne le conteste pas :)


    Pour que la discussion puisse être identifiée comme résolue merci de marquer les réponses qui vous ont aidées à solutionner votre problème comme "réponse".

    mardi 14 février 2012 15:18
  • Mais je vois surtout que tu essaies de réinventer la roue, enfin la listbox :

    <UserControl x:Class="Monappli.ItemFigure"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        x:Name="ItemFigureControl"
        FontFamily="{StaticResource PhoneFontFamilyNormal}"
        FontSize="{StaticResource PhoneFontSizeNormal}"
        Foreground="{StaticResource PhoneForegroundBrush}">
     
       <!-- on vire <ListBoxItem>-->
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <Image Grid.Column="0"
                        Source="{Binding Icon}"
                        Height="70"
                        Width="70"
                        Margin="6" />
                <StackPanel Grid.Column="1"  
                            Orientation="Horizontal"
                            VerticalAlignment="Center">
                    <TextBlock Text="{Binding Name}" 
                                Foreground="Black" 
                               Style="{StaticResource PhoneTextTitle2Style}" />
                </StackPanel>
     
            </Grid>
        <!-- on vire </ListBoxItem> -->
    </UserControl>
    et le code behind :


    public event EventHandler Click;
     
            public ItemFigure()
            {
                InitializeComponent();
              }
     
           }



    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    mardi 14 février 2012 15:22
  • et pour l'utiliser



    <!--Élément un de tableau croisé dynamique-->
                <controls:PivotItem Header="Surfaces">
                     <ListBox Margin="12,0,12,0" x:Name="surfaces" SelectionChanged="surfaces_SelectionChanged">
                                <ListBox.ItemTemplate>
                                    <DataTemplate>
                                        <local:ItemFigure  />
                                    </DataTemplate>
                                </ListBox.ItemTemplate>
                            </ListBox>
                  </controls:PivotItem>




    Coté ode behind de PivotPage.xaml :

    private void surfaces_SelectionChanged(object sender, SelectionChangedEventArgs e){
    if(e.AddedItems.Count==0)
      return;
    var item=e.AddedItems[0] as MonObject;
    MessageBox.Show(item.Icon+"  "+item.Name);
    ((ListBox)sender).SelectedItem=null;
    }


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue


    mardi 14 février 2012 15:22
  • Bon, je m'incline. suis même un peu gêné.. mais bon
    mardi 14 février 2012 16:03