【问题标题】:WPF DataGrid - add button to end of every rowWPF DataGrid - 将按钮添加到每行的末尾
【发布时间】:2014-10-18 01:02:45
【问题描述】:

我想在数据网格的每一行末尾添加一个按钮。我找到了以下 xaml,但它将按钮添加到了开头。任何人都知道如何在所有数据绑定列之后添加它?

这会将按钮添加到开头而不是结尾:

  <DataGrid Background ="Black" ItemsSource="{Binding PriceList}">
    <DataGrid.Columns>
      <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
            <Button>My button</Button>
          </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
    </DataGrid.Columns>
  </DataGrid>

在此先感谢

【问题讨论】:

  • 这个绑定是如何工作的?

标签: c# wpf datagrid


【解决方案1】:

您必须手动添加列。

关闭列的自动生成并按您想要的顺序添加它们,包括列表末尾的额外列:

  <DataGrid Background ="Black"
            ItemsSource="{Binding PriceList}"
            AutoGenerateColumns="False">
    <DataGrid.Columns>

      <!-- Add your normal columns here -->

      <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
            <Button>My button</Button>
          </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
    </DataGrid.Columns>
  </DataGrid>

【讨论】:

    【解决方案2】:

    找到一些样式的按钮控件。 Style 定义了一个 Trigger 元素,它根据按钮内容/文本更改按钮的背景属性和可见性。

     <DataGrid  ItemsSource="{Binding}" Name="dgvProcessLists" SelectionMode="Single">\
    <DataGrid.Columns><DataGridTextColumn Binding="{Binding SIZE_FP}" FontFamily="Verdana" Header="SIZE FP" IsReadOnly="True" Width="100" />
    <DataGridTemplateColumn Width="140" Header="Command">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <Button Content="{Binding  DB_STEP_NAME}" Tag="{Binding STEP_ORDER}" Click="btnContinue_Click" >
                                            <Button.Style>
                                                <Style x:Name="ButtonVisibility">
                                                    <Setter Property="Button.Visibility" Value="Hidden"/>
                                                    <Style.Triggers>
                                                        <DataTrigger Binding="{Binding STATUS}" Value="Failed">
                                                            <Setter Property="Button.Visibility" Value="Visible"/>
                                                            <Setter Property="Button.Background" Value="#777777"/>
                                                        </DataTrigger>
                                                        <DataTrigger Binding="{Binding STATUS}" Value="Execute">
                                                            <Setter Property="Button.Visibility" Value="Visible"/>
                                                            <Setter Property="Button.Background" Value="AliceBlue"/>
                                                        </DataTrigger>
                                                        <DataTrigger Binding="{Binding STATUS}" Value="Re-Evaluate">
                                                            <Setter Property="Button.Background" Value="Blue"/>
                                                        </DataTrigger>                                                    
                                                        <DataTrigger Binding="{Binding STATUS}" Value="Final">
                                                            <Setter Property="Button.Visibility" Value="Visible"/>
                                                            <Setter Property="Button.Background" Value="Blue"/>
                                                        </DataTrigger>
                                                    </Style.Triggers>
                                                </Style>
                                            </Button.Style>
                                        </Button>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>
                                </DataGrid.Columns>
    </Datagrid>

    【讨论】:

      【解决方案3】:

      如果您的 DataGrid 看起来像这样,请尝试以下示例:

       <DataGrid ItemsSource="{Binding PriceList}">
              <DataGrid.Columns>
                  <DataGridTemplateColumn>
                      <DataGridTemplateColumn.CellTemplate>
                          <DataTemplate>
                              <StackPanel Orientation="Horizontal"> 
                                 <TextBlock Text="{Binding }"/>
                                 <Button>My button</Button>
                              </StackPanel>
                          </DataTemplate>
                      </DataGridTemplateColumn.CellTemplate>
                  </DataGridTemplateColumn>
              </DataGrid.Columns>
          </DataGrid>
      

      【讨论】:

        【解决方案4】:

        您可以使用转换器按名称选择哪一列!

        我这样创建我的专栏:(也许它适用于另一种方法)

        DataGridTextColumn column = new DataGridTextColumn();
        column.Binding = new Binding("ColumnName");
        dataGrid.Columns.Add(column)
        

        在您的DataTrigger 中,当列具有特定名称时,您定义不同的DataTemplate

        ...
        xmlns:tools="clr-namespace:App.Tools"
        ...
        
        <ResourceDictionary>
        
            <tools:CustomButtonConverter x:Key="CustomButtonConv" />
        
            <DataTemplate x:Key="CustomButton">
                <Button Click="HandlerClick" />
            </DataTemplate>
        
            <Style x:Key="DataGridCellStyle" TargetType="DataGridCell">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Column, RelativeSource={RelativeSource Mode=Self}, Converter={StaticResource CustomButtonConv}}" Value="ColumnName">
                        <Setter Property="ContentTemplate" Value="{StaticResource CustomButton}" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        
        </ResourceDictionary>
        
        ...
        
        <DataGrid x:Name="dataGrid" CellStyle="{StaticResource DataGridCellStyle}" />
        

        ColumnName 替换为您的专栏名称...

        您的转换器:

        namespace App.Tools
        {
            public class CustomButtonConverter : IValueConverter
            {
                public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
                {
                    var dataGridTextColumn = value as DataGridTextColumn;
                    return dataGridTextColumn.SortMemberPath;
                }
        
                public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
                {
                    return value;
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2011-03-04
          • 1970-01-01
          • 2019-06-07
          • 2018-04-24
          • 2015-03-20
          • 2010-11-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多