我有DataGrid
,当有人点击DataGridCell时,我希望值覆盖该单元格。最好的办法是什么? Adornlayer?定制控制?
以下是一个例子。有人点击DataGrid的17.27
,我希望旁边的价格范围。然后,用户可以选择一个值并使用新价格设置DataGridCell。一个转折点是值接下来,而不是下拉,或者我只能使用ComboBox
。
答案 0 :(得分:2)
在我看来,你将适合这种控制:
对于ComboBox
,您可以设置动态范围,并附加到集合中。在DataGrid
中,您可以使用DataGridTemplateColumn
列自行完成ComboBox:
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=CustomObjectStringMember}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Path=CustomObjectListMember}"
Text="{Binding Path=CustomObjectStringMember}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
或使用DataGridComboBoxColumn
:
<DataGridComboBoxColumn Header="Current Category"
SelectedValueBinding="{Binding Path=CurrentCategory}"
SelectedValuePath="CategoryID"
DisplayMemberPath="CategoryName"
ItemsSource="{Binding Source={StaticResource categoriesDataProvider}}" />
IntegerUpDown
提供了一个带有按钮微调器的TextBox,它允许使用微调器按钮递增和递减Nullable值。
尝试Popup
使用ListBox
,如下所示:
<Popup Name="MyPopUp"
UseLayoutRounding="True"
AllowsTransparency="False"
IsOpen="True"
Placement="Right">
<Border Name="BorderContent"
UseLayoutRounding="True"
Width="140"
BorderThickness="1"
BorderBrush="Black">
<StackPanel Background="White">
<TextBlock Background="White"
Foreground="Black"
HorizontalAlignment="Center"
Text="MARKET" />
<Separator Background="Black" Height="2" />
<ListBox BorderBrush="Transparent">
<ListBoxItem>17.27</ListBoxItem>
<ListBoxItem>17.28</ListBoxItem>
<ListBoxItem>17.29</ListBoxItem>
<ListBoxItem>17.30</ListBoxItem>
</ListBox>
</StackPanel>
</Border>
</Popup>
Output
对于Popup
,您可以将展示位置设置为 Right
,并为ItemSource使用动态集合。要在DataGrid
中显示弹出窗口,您需要将其放在CellEditingTemplate
中,如下所示:
<DataGridTemplateColumn Header="Test">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Sample}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<Grid>
<TextBox Text="{Binding Path=Sample}" />
<Popup ... />
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
答案 1 :(得分:0)
我认为Popup
可能是最好的。