使用 WPF 的网格中的按钮数组

Posted

技术标签:

【中文标题】使用 WPF 的网格中的按钮数组【英文标题】:array of buttons in grid using WPF 【发布时间】:2012-04-11 16:04:07 【问题描述】:

下面的代码在 .net 4 中的 WPF 中,它显示了一个开头为空的网格。当我添加元素时,它将分别在最后两列中显示带有进度条和“发送”按钮的行。当我再添加一行时,会再出现一个进度条和按钮。但是如果我单击按钮,所有按钮都使用相同的事件处理程序。如何使行中的每个进度条和按钮不同?

<Window x:Class="ObservableCollection.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <DataGrid Name="DataGrid" ItemsSource="Binding DataGrids" AutoGenerateColumns="False" RowHeight="30"
                  ColumnWidth="100" ColumnHeaderHeight="50" HeadersVisibility="Column" AlternatingRowBackground="LightBlue"
                  CanUserAddRows="False" Background="Transparent" RowBackground="Transparent" BorderBrush="Gray"
                  CellStyle="StaticResource Body_Conternt_DataGrid_Centering"
                  IsReadOnly="True" Margin="49,66,45,62" Opacity="1" >
                  <DataGrid.Columns>
            <DataGridTextColumn Width="*" Header="UID" Binding="Binding Uid" />
            <DataGridTextColumn Width="*" Header="Type" Binding="Binding Type" />
            <DataGridTextColumn Width="*" Header="Channel Type" Binding="Binding ChannelType" />
            <DataGridTextColumn Width="*" Header="Certificate" Binding="Binding Certificate" />
            <DataGridTextColumn Width="*" Header="Life Cycle State" Binding="Binding LifeCycle" />
            <DataGridTextColumn Width="*" Header="Status" Binding="Binding Status" />
            <DataGridTextColumn Width="*" Header="Image UID" Binding="Binding ImageUid" />

            <DataGridTemplateColumn Width="*">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ProgressBar Height="20" Value="Binding Progress"></ProgressBar>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <DataGridTemplateColumn Width="*">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button Name="btnSend" Click="btnSend_Click">Send</Button>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
                </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

【问题讨论】:

【参考方案1】:

我正在考虑将 Tag 属性绑定到您要发送的任何内容的唯一键,

<Button Tag="Binding ID> 

并在您的发送事件中取回标签值..

var button = sender as Button;
var tag = button.Tag;

【讨论】:

【参考方案2】:

此链接可能很有用,其中描述了单击数据网格列中的按钮时如何获取行号

WPF DataGrid - Button in a column, getting the row from which it came on the Click event handler

【讨论】:

以上是关于使用 WPF 的网格中的按钮数组的主要内容,如果未能解决你的问题,请参考以下文章

如何基于二维数组填充 WPF 网格

WPF - 折叠网格单元

WPF网格中重叠的按钮单元格

在网格中自动排列 wpf 控件

网格忽略 WPF 中的 ClipToBounds

如何重新加载 WPF 网格