回答
使用Snoop來分析一個測試程序,我放在一起的視覺樹後,我想出了使用DataGrid_Loaded事件該解決方案):
private void TheGrid_Loaded(object sender, RoutedEventArgs e) {
var dataGrid = (DataGrid)sender;
var border = (Border)VisualTreeHelper.GetChild(dataGrid, 0);
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
var grid = (Grid)VisualTreeHelper.GetChild(scrollViewer, 0);
var button = (Button)VisualTreeHelper.GetChild(grid, 0);
button.IsEnabled = false;
}
可能有一個更優雅的XAML唯一的解決方案,但這是首先想到的,它似乎工作得很好(我顯然沒有做任何異常處理)。
注意:我還沒有玩過禁用/重新啓用DataGrid以確保全選按鈕停留停用。如果它不保持禁用狀態,那麼您可能還想掛鉤DataGrid_IsEnabledChanged事件。
希望這有助於!
這是一個糟糕的解決方案,很容易在xaml構造中修改。如果您只想禁用按鈕,請按照Eben的建議使用綁定命令,或者如果您想隱藏按鈕,則按Varun的建議禁用顯示。 – TheRoadrunner 2014-10-28 08:50:23
在DataGrid
有一個屬性HeadersVisibility
。它有四個值 - All
,Column
,,None
。
隨着HeadersVisibility = All
,你會得到SelectAll按鈕。
與HeadersVisibility = Column
,你將只獲得列。不是SelectAll按鈕或行標題來選擇一個完整的行。
隨着HeadersVisibility = Row
,你將只獲得行頭選擇整行。不是SelectAll按鈕或列。
與HeadersVisibility = None
,你什麼也得不到。所有標題將被隱藏。
我希望這可以幫助你。
將命令綁定添加到SelectAll命令並在CanExecute中返回false以禁用selectall按鈕。
我會改變Control Templat
ËDataGrid中的。 需要在模板內禁用此按鈕。 這是DataGrid
ControlTemplate
:
<ControlTemplate TargetType="{x:Type DataGrid}">
<Border BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
Padding="{TemplateBinding Padding}"
SnapsToDevicePixels="True">
<ScrollViewer x:Name="DG_ScrollViewer"
Focusable="false">
<ScrollViewer.Template>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Button Command="{x:Static DataGrid.SelectAllCommand}"
Focusable="false"
Style="{DynamicResource {ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}}"
Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.All}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
Width="{Binding CellsPanelHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
<DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter"
Grid.Column="1"
Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
<ScrollContentPresenter x:Name="PART_ScrollContentPresenter"
CanContentScroll="{TemplateBinding CanContentScroll}"
Grid.ColumnSpan="2"
Grid.Row="1" />
<ScrollBar x:Name="PART_VerticalScrollBar"
Grid.Column="2"
Maximum="{TemplateBinding ScrollableHeight}"
Orientation="Vertical"
Grid.Row="1"
Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
ViewportSize="{TemplateBinding ViewportHeight}" />
<Grid Grid.Column="1"
Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding NonFrozenColumnsViewportHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ScrollBar x:Name="PART_HorizontalScrollBar"
Grid.Column="1"
Maximum="{TemplateBinding ScrollableWidth}"
Orientation="Horizontal"
Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
ViewportSize="{TemplateBinding ViewportWidth}" />
</Grid>
</Grid>
</ControlTemplate>
</ScrollViewer.Template>
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</ScrollViewer>
</Border>
</ControlTemplate>
它手動禁用按鈕,並指定這個ControlTemplate
您DataGrid
。
- 1. DataGrid/ListBox中的WPF按鈕
- 2. WPF:將按鈕列添加到Datagrid
- 3. WPF Datagrid ColumHeader MouseOver關閉按鈕
- 4. WPF Datagrid瀏覽按鈕問題
- 5. 選擇單選按鈕,wpf
- 6. 按鈕上的Datagrid行選擇單擊WPF
- 7. WPF中的DataGridTemplateColumn中的瀏覽按鈕Datagrid中的按鈕
- 8. ASPxListBox「全選」按鈕
- 9. WPF DataGrid篩選器
- 10. WPF DataGrid全行編輯
- 11. Datagrid中的按鈕
- 12. 爲什麼我的Windows 8 WPF單選按鈕全部出錯?
- 13. 創建「全選」按鈕來選擇所有按鈕
- 14. WPF DataGridHeaderTemplate作爲按鈕
- 15. WPF Datagrid無法選擇行
- 16. WPF DataGrid行選擇問題
- 17. WPF Datagrid風格選擇行
- 18. wpf datagrid複選框列
- 19. 複選框DataGrid中MVVM WPF
- 20. WPF datagrid多行選擇
- 21. 如何使添加的按鈕對Wpf Datagrid中的選定行可見
- 22. 入門按鈕選定的報告文件行從WPF的Datagrid點擊
- 23. 如何在擴展器的右角添加按鈕 - WPF DataGrid
- 24. WPF DataGrid - 添加項目,如果按鈕被點擊
- 25. Click事件WPF DataGrid的按鈕列添加在PowerShell中
- 26. 如何將wpf datagrid scrollviewer visiblity綁定到按鈕可見性?
- 27. WPF Datagrid雙向綁定:點擊按鈕添加行
- 28. 使用刪除按鈕刪除WPF Datagrid中的行
- 29. 如何在wpf中的datagrid中動態添加按鈕?
- 30. 通過單擊刪除鍵按鈕來刪除DataGrid行(WPF)
我不確定禁用它,但我發現隱藏你的RowHeaders會隱藏它。 (對我造成問題是因爲我想隱藏RowHeaders但顯示SelectAll按鈕) – Rachel 2010-11-19 16:35:16