我想要一个用户点击WPF中DataGrid中的单元格的场景,我想在它旁边打开NumPad(这基本上是基于触摸的输入)。 NumPad,我理解是一个单独的窗口。
1)如何知道选择了哪个Cell?2)如何在单元格旁边显示NumPad?
3)如何找到单元的坐标来定位我的NumPad?
4)如何根据NumPad条目设置单元格的值?
NumPad是同一应用程序中的WPF用户控件。 DataGrid是一个.NET 4控件。 这是一个普通的Windows桌面应用程序
答案 0 :(得分:8)
这不是一项微不足道的任务,你应该对WPF有一些了解,但是这里有一些你可能想要的想法:
DataGridCell.IsSelected
属性会告诉您是否选择了单元格。 Popup
直接在单元格旁边显示NumPad。 Popup
,则不需要坐标,但可以使用Popup.Placement
属性指定相对位置。另请参阅此MSDN文档:Popup Placement Behavior 使用DataGrid.CellStyle
或DataGridColumn.CellStyle
属性,您可以为DataGrid的所有单元格或某个特定列指定备用样式。在此样式中,您可以更改模板并添加Popup
,只有在选中当前单元格时才会打开该{{1}}。您可以通过将Popup.IsOpen
属性绑定到DataGridCell.IsSelected
属性来轻松实现此目的。
这只是一个初步想法。您仍然需要查看提供的MSDN链接,并阅读有关WPF的其他一些内容。虽然可能需要一些时间来学习这种“WPF方式”(即只有XAML),但是(在我看来)它比使用大量代码隐藏来确定当前选择的单元格,将控件定位在正确的位置更容易,将数据从NumPad传输到单元格等等......
答案 1 :(得分:3)
我真的很喜欢Gehho的回答。 按照他的建议,除了使用模板列而不是样式文本列之外,还会产生以下XAML:
<Grid x:Name="LayoutRoot">
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Header="R" Binding="{Binding Color.R}" />
<DataGridTextColumn Header="G" Binding="{Binding Color.G}" />
<DataGridTextColumn Header="B" Binding="{Binding Color.B}" />
<DataGridTextColumn Header="Alpha" Binding="{Binding Color.A}" />
<DataGridTemplateColumn Header="Thumb">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border x:Name="border" Background="{Binding}">
<Popup IsOpen="{Binding IsMouseOver, ElementName=border, Mode=OneWay}"
PopupAnimation="Fade"
Placement="MousePoint">
<Border Width="200" Height="200" Background="{Binding Background , ElementName=border, Mode=OneWay}" />
</Popup>
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<SolidColorBrush Color="Red"/>
<SolidColorBrush Color="Green"/>
<SolidColorBrush Color="Blue"/>
<SolidColorBrush Color="Yellow"/>
<SolidColorBrush Color="SteelBlue"/>
<SolidColorBrush Color="Lime"/>
<SolidColorBrush Color="Cyan"/>
</DataGrid>
</Grid>
</Window>
希望这有帮助!