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

时间:2012-03-28 04:26:24

标签: .net wpf visual-studio-2010 xaml c#-4.0

下面的代码位于.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>

2 个答案:

答案 0 :(得分:3)

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

<Button Tag="{Binding ID}> 

并在您的发送事件中获取标记值..

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

答案 1 :(得分:2)

此链接可能很有用,其中描述了如何在单击datagrid列中的按钮时获取rownumber

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