WPF DataGrid CellEditingTemplate с плавающим элементом управления - PullRequest
0 голосов
/ 18 ноября 2009

Я использую WPF DataGrid и хочу создать свой собственный CellEditingTemplate. Я хочу воспроизвести что-то вроде DatePicker, который не заменяет все содержимое ячейки при редактировании, а просто плавает Как это: http://i3.windowsclient.net/SiteFiles/1000/wpfsp1/wpf-35sp1-toolkit/107-2.png?cdn_id={b4d0570c}

Я пробовал это:

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

но это, похоже, не помогает. Мне было интересно, как я могу создать свой собственный элемент управления, который можно использовать для шаблона редактирования ячейки.

Спасибо, Raul

Ответ:

<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>

Ответы [ 2 ]

2 голосов
/ 18 ноября 2009

Значением по умолчанию для свойства Popup.IsOpen является False, так что это как минимум одна причина, по которой вы не видите всплывающее окно. Возможно, это решит вашу проблему:

<DataTemplate>
  <Popup AllowDrop="False" StaysOpen="False" IsOpen="True">
    <Canvas Width="100" Height="100" Background="Aqua"/>
  </Popup>
</DataTemplate>
0 голосов
/ 18 ноября 2009

поместите в свой CellTemplate кнопку, которая будет реагировать на ваше событие клика, и в обработчике кликов вы можете отобразить всплывающее окно, из которого вы будете выбирать свои значения.

...