2016-12-25 65 views
0

我想顯示一個彈出窗口,通過在數據網格的最後一行添加一個按鈕來幫助用戶向數據網格添加新行。我覺得必須有DataGridTemplateColumn屬性我必須爲newrow/addrow模板設置?如何將按鈕添加到數據網格的最後一行/新行?

+0

我建議將該按鈕放置在DataGrid附近,而不是在它內部。這將使它更容易和更清潔。 – icebat

回答

1

你可以做的是寫一個樣式「DataGridRow」作爲

氏的工作實例

<Style x:Type="DataGridRow"> 
<Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type DataGridRow}"> 
        <Grid Background="{TemplateBinding Background}"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*"/> 
          <ColumnDefinition Width="auto"/> 
         </Grid.ColumnDefinitions> 
         <ContentPresenter Grid.Column="0" /> 
         <Button Visibility = "{Binding IsLastRow}"/>!--can set converter to convert boolean to visibilty as well. 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
</Style> 

所以綁定的屬性基本檢查的最後一排的邏輯。(我不確定wpf datagrid本身是否提供某種類型的屬性,如「IsLastRow」,但如果沒有的話,你可以編寫自己的邏輯)。

在ContentTemplate中,您可以定義您的按鈕處理程序或命令對象。

0

你可以使用一個DataGridRow風格與數據觸發改變的最後一排的模板:

<DataGrid x:Name="dgrid"> 
    <DataGrid.Resources> 
     <Style TargetType="{x:Type DataGridRow}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding}" Value="{x:Static CollectionView.NewItemPlaceholder}"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type DataGridRow}"> 
           <Border x:Name="DGR_Border" BorderBrush="{TemplateBinding BorderBrush}" 
               BorderThickness="{TemplateBinding BorderThickness}" 
               Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
            <Grid> 
             <SelectiveScrollingGrid> 
              <SelectiveScrollingGrid.ColumnDefinitions> 
               <ColumnDefinition Width="Auto"/> 
               <ColumnDefinition Width="*"/> 
              </SelectiveScrollingGrid.ColumnDefinitions> 
              <SelectiveScrollingGrid.RowDefinitions> 
               <RowDefinition Height="*"/> 
               <RowDefinition Height="Auto"/> 
              </SelectiveScrollingGrid.RowDefinitions> 
              <DataGridCellsPresenter Grid.Column="1" ItemsPanel="{TemplateBinding ItemsPanel}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
              <DataGridDetailsPresenter Grid.Column="1" Grid.Row="1" SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding AreRowDetailsFrozen, ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical}, Converter={x:Static DataGrid.RowDetailsScrollingConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Visibility="{TemplateBinding DetailsVisibility}"/> 
              <DataGridRowHeader Grid.RowSpan="2" SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Row}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/> 
             </SelectiveScrollingGrid> 
             <Button Content="Add New" /> 
            </Grid> 
           </Border> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.Resources> 
</DataGrid> 

或者 - 如果你想要把按鈕在一個特定的列 - 你可以使用一個DataGridTemplateColumn與一個CellTemplate使用類似的數據觸發器:

<DataGrid x:Name="dgrid"> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <Grid> 
         <TextBlock>...</TextBlock> 
         <Button x:Name="btn" Content="Add" Visibility="Collapsed" /> 
        </Grid> 
        <DataTemplate.Triggers> 
         <DataTrigger Binding="{Binding Path=DataContext, RelativeSource={RelativeSource AncestorType=DataGridRow}}" 
              Value="{x:Static CollectionView.NewItemPlaceholder}"> 
          <Setter TargetName="btn" Property="Visibility" Value="Visible" /> 
         </DataTrigger> 
        </DataTemplate.Triggers> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 
相關問題