Hallo zusammen,
ich habe folgendes Problem, und zwar habe ich ein Datagrid und mit verschiedenen Werten, welche der User bearbeiten kann. Dort gibt es auch ein Notiz Feld. Die Notiz kann natürlich etwas länger sein und aber in so einer Datagrid Zelle ist relativ wenig platz. Deswegen habe ich mich dafür entschieden ein Popup einzubinden mit einem Textblock, wo der User einfach sein Inhalt eingeben kann. Meine ersten Versuche sahen ungefähr so aus:
<DataGridTemplateColumn Header="Notiz" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock Style="{StaticResource ValidatedTextBlockStyle}"
Text="{Binding Note}"/>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<Grid>
<TextBlock Style="{StaticResource ValidatedTextBlockStyle}"
Text="{Binding Note}"/>
<Popup x:Name="popup"
helper:PopupHelper.IsPopupOpen="True"
Placement="MousePoint"
StaysOpen="False">
<ui:TextBox Text="{Binding Note}" AcceptsReturn="True" Width="300" Height="200"/>
</Popup>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
Der Code funktioniert insofern das das Popup sich öffnet wenn ich die zelle anklicke, aber dann wird es sehr verbuggt irgendwie und für mich sehr schlecht nachzuvollziehen. Das Popup lässt sich z.B nicht immer schließen wenn ich außerhalb des Popups was anklicke. Wenn es sich dann aber schließt lässt es sich bei einem wiederholendem Versuch auf die Zelle zu klicken nicht mehr öffnen. Wenn ich aber durch tabe durch das Datagrid und die Zelle somit bearbeite dann funktioniert.
ich bin noch relativ neu Unterwegs in der C#/WPF Welt und wäre dankbar für jeden Tipp!
Moin,
ich gehe üblicherweise den Weg, die Eingabe über einen zusätzlichen Dialog anzubieten. Möglicherweise ist das auch eine Alternative für dich.
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Style="{StaticResource FormTextBlockStyle}" Text="{Binding Note}" TextAlignment="Left" HorizontalAlignment="Left"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<DockPanel LastChildFill="True">
<Button Content="Bearbeiten" Margin="0,0,4,0" Command="{Binding EditNoteCommand}"/>
<TextBlock HorizontalAlignment="Left" TextAlignment="Left" VerticalAlignment="Center" Style="{StaticResource FormTextBlockStyle}" Text="{Binding Note}" />
</DockPanel>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
Solltest du bei deinem Vorhaben bleiben wollen, musst du dich ein wenig mit den DataGridCell - Events und dem Stichwort "Eingabefokus" beschäftigen.
<Popup
IsOpen="{Binding IsSelected, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridCell}}}"
Placement="MousePoint"
StaysOpen="False">
<TextBox
Width="300"
Height="200"
AcceptsReturn="True"
Text="{Binding Note}" />