无法将Click事件应用于具有自定义按钮样式的按钮

时间:2012-09-11 12:21:27

标签: c# wpf xaml .net-4.0

以下是我的数据结构:

public class TokenItems 
{ 
    public int ID { get; set; } 
    public int itemID { get; set; }
    public string name { get; set; } 
    public int qty { get; set; } 
    public int twQty { get; set; } 
    public bool readyStatus { get; set; } 
    public Nullable<DateTime> orderOn { get; set; } 
    public int styleType { get; set; } 
}

public class Token 
{ 
    public int tokenNo { get; set; } 
    public Nullable<DateTime> startedOn { get; set; } 
    public List<TokenItems> tokenItems { get; set; } 
    public bool readyStatus { get; set; } 
    public bool acceptStatus { get; set; } 
}

以上结构非常适合以下DataTemplate。 (它有多个数据模板,DataTemplate中的DataTemplate)

TokenPanel拥有来自Token类的数据,该数据从后面的代码中分配,如下所示:

TokenPanel.ItemsSource = List<Token> filledList;

tokenItems在XAML中分配:

ItemsSource = {Binding List<TokenItems> tokenItem}

tokenItems的模板还包含从tokenItem的列表项创建的按钮模板。

我已使用Click事件(listClick)将自定义样式(redButton)应用于按钮。

<ScrollViewer>
            <ItemsControl x:Name="TokenPanel">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="0.119*"/>
                                <RowDefinition Height="0.881*"/>
                            </Grid.RowDefinitions>
                            <TextBlock TextWrapping="Wrap" Text="{Binding tokenNo}" />
                            <StackPanel Grid.Row="1" Width="Auto" HorizontalAlignment="Stretch">
                                <ItemsControl Height="Auto" ItemsSource="{Binding tokenItems}" HorizontalAlignment="Stretch" Width="Auto">
                                    <ItemsControl.ItemTemplate>
                                        <DataTemplate>
                                            <Button Height="38" Width="Auto" Style="{StaticResource redButton}" HorizontalContentAlignment="Stretch" Click="listClick" >
            <TextBlock Text= "{Binding name}"/>
                                            </Button>

                                        </DataTemplate>
                                    </ItemsControl.ItemTemplate>

                                </ItemsControl>
                            </StackPanel>
                        </Grid>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <WrapPanel Height="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" x:Name="tokenListBox" />
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>
        </ScrollViewer>

该程序编译良好,没有任何错误。但是,当我更新TokenList时,它在XAML解析中的某处显示了NullReference异常的错误。

我尝试从XAML中删除Click事件属性,而不分配任何点击事件。这个执行程序非常好。但我不能点击我想要的最重要的按钮。此外,我也需要定制风格。

我无法弄清楚问题是什么......快速修复将受到高度赞赏。

编辑:

这会更新tokenList;

 public void update() {
        List<TokenItems> tempList = new List<TokenItems>();
        tokenList.Clear(); // clears previous items in tokenList;
        while(database.Read()) {
                tempList.Add(new Token() { 
                           item= (int)database["item"]
                        });
        }

           var temp = new List<BumpBar.TokenItems>();
           temp.AddRange(tokenModify(tempItems)); // modifies the items within the list
           tempItems.Clear(); // clear to refill the tempItems
           tempItems.AddRange(temp);

           tokenList.Add(new Token() { 
                     tokenNo = tokensList[i].tokenNo, 
                     tokenItems = tempItems, 
                      startedOn = tokensList[i].startedOn 
                    });
  }

1 个答案:

答案 0 :(得分:0)

发布与此评论相关的代码。我猜你不小心弄清了那个令牌列表。

  

该程序编译良好,没有任何错误。但是,当我更新它显示的TokenList时   在XAML解析中的某处出现NullReference异常错误。