2009-11-18 4 views
0

J'utilise le DataGrid WPF et je souhaite créer mon propre CellEditingTemplate. Je veux reproduire quelque chose comme le DatePicker qui ne remplace pas tout le contenu de la cellule lorsque son cours d'édition, mais simplement comme ce à virgule flottante: http://i3.windowsclient.net/SiteFiles/1000/wpfsp1/wpf-35sp1-toolkit/107-2.png?cdn_id={b4d0570c}WPF DataGrid CellEditingTemplate avec contrôle flottant

J'ai essayé ceci:

<tk:DataGridTemplateColumn.CellEditingTemplate> 
    <DataTemplate> 
     <Popup AllowDrop="False" StaysOpen="False" > 
      <Canvas Width="100" Height="100" Background="Aqua"/> 
     </Popup> 
    </DataTemplate> 
</tk:DataGridTemplateColumn.CellEditingTemplate> 

mais ne semble pas faire l'affaire. Je me demandais comment je pourrais faire mon propre contrôle qui peut être utilisé pour un modèle de modification de cellule.

Merci, Raul

Réponse:

<tk:DataGridTemplateColumn.CellEditingTemplate> 
    <DataTemplate> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="Auto" /> 
      </Grid.ColumnDefinitions> 
      <TextBlock x:Name="PART_TextBox" 
        Grid.Row="0" Grid.Column="0" 
        Text="{Binding User.Name}" /> 
      <Popup x:Name="PART_Popup" 
        PlacementTarget="{Binding ElementName=PART_TextBox}" 
        Placement="Bottom" 
        StaysOpen="True" 
        AllowsTransparency="True" 
        IsOpen="True"> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="Auto" /> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto" /> 
         <RowDefinition Height="*" /> 
        </Grid.RowDefinitions> 
        <TextBox Grid.Column="0" Grid.Row="0" Text="(Enter a last, first)"/> 
        <Button Grid.Column="1" Grid.Row="0" Content="Search" /> 
        <TreeView Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2" Height="200" Width="200" /> 
       </Grid> 
      </Popup> 
     </Grid> 
    </DataTemplate> 
</tk:DataGridTemplateColumn.CellEditingTemplate> 

Répondre

2

La valeur par défaut de la propriété Popup.IsOpen est False, c'est donc au moins une raison pour laquelle vous ne voyez pas la fenêtre contextuelle. Peut-être que cela va résoudre votre problème:

<DataTemplate> 
    <Popup AllowDrop="False" StaysOpen="False" IsOpen="True"> 
    <Canvas Width="100" Height="100" Background="Aqua"/> 
    </Popup> 
</DataTemplate> 
+0

C'était tout. J'ai aussi dû avoir StaysOpen = "True" Merci! – HaxElit

0

mettre un bouton dans votre CellTemplate qui répondra à votre événement click et dans le gestionnaire de clic, vous pouvez afficher une pop-up où vous sélectionnez votre valeurs.