WPF DataGrid操作
阿新 • • 發佈:2021-06-29
AutoGenerateColumns 自動生成列
GridLinesVisibility 網格線可見性
CanUserDeleteRows 使用者是否可以刪除行
CanUserAddRows 使用者是否可以新增行
文字居中
<Style x:Key="CenterAlignmentStyle" TargetType="TextBlock"> <Setter Property="TextAlignment" Value="Center"/> <Setter Property="VerticalAlignment" Value="Center"/> </Style> <DataGridTextColumn Header="工步號" Width="50" Binding="{Binding StepID}" IsReadOnly="True" ElementStyle="{StaticResource CenterAlignmentStyle }"/>
右鍵選中
// 右鍵點選觸發事件
MouseRightButtonDown="DataGrid_MouseRightButtonDown"
// 只能選中一行
SelectionMode="Single"
private void DataGrid_MouseRightButtonDown(objectsender, MouseButtonEventArgs e) { // 獲取座標 Point p = e.GetPosition((ItemsControl)sender); // 通過指定 Point 返回命中測試的最頂層 Visual 物件。 HitTestResult htr = VisualTreeHelper.HitTest((ItemsControl)sender, p); TextBlock o= htr.VisualHit as TextBlock; if (o != null) { DataGridRow dgr = GetParentObject<DataGridRow>(o) as DataGridRow; dgr.Focus(); dgr.IsSelected = true; } } public T GetParentObject<T>(DependencyObject obj) where T : FrameworkElement { DependencyObject parent = VisualTreeHelper.GetParent(obj); while (parent != null) { if (parent is T) { return (T)parent; } parent = VisualTreeHelper.GetParent(parent); } return null; }
自定義列 不需要雙擊選擇
<DataGridTemplateColumn Header="測試項" SortMemberPath="IsSelected" Width="100"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <CheckBox IsChecked="{Binding Path=IsSelected,UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center" Command="{Binding Path=DataContext.SelectTestItemCommand ,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}}" Content="{Binding ItemName}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
模板
<DataGrid AutoGenerateColumns="False" GridLinesVisibility="None" CanUserDeleteRows="False" CanUserAddRows="False" FontSize="13" ItemsSource="{Binding TestList}"> <DataGrid.Columns> <DataGridTextColumn Header="序號" Binding="{Binding ID}" Width="50"/> <DataGridTemplateColumn Header="測試項" SortMemberPath="IsSelected" Width="100"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <CheckBox IsChecked="{Binding Path=IsSelected,UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center" Command="{Binding Path=DataContext.SelectTestItemCommand ,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}}" Content="{Binding ItemName}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <!--<DataGridTextColumn Header="測試次數" Binding="{Binding Number}" Width="50"/>--> </DataGrid.Columns> </DataGrid>