全部在列表框内调用OnTap用户控件事件

时间:2014-01-23 16:20:41

标签: c# windows-phone-8

我陷入了一种情况,我想在列表框中调用我的用户控件的OnTap事件。问题是每次点击用户控件时都会触发该事件,但我想立即调用所有点击事件(基于列表框项目)。为此,我创建了一个用户控件,我在其中覆盖了OnTap事件:

protected override void OnTap(System.Windows.Input.GestureEventArgs e)
{
  //Get Reciter and download in Reciter folder
  if (!downloadClicked)
  {
    downloadClicked=true;
    if (!string.IsNullOrEmpty(SuraNumber))
    {
      verseNumber = 0;
      verseByverseFiles = new List<string>();
      selectedReciter = DataSource.getSelectedReciter();
      DataSource.addVerseByVerseFiles(Convert.ToByte(SuraNumber), verseByverseFiles, selectedReciter);
      txtProgress.Text = "Downloading...";
      downloadFile();
    }
  }
  base.OnTap(e);
}

当我点击列表框中的某个项目时,会调用此事件,这没关系。

我创建了一个按钮,我想通过点击按钮调用单个列表框项目点击事件。

以下是我失败的尝试(我的用户控件在列表框内作为项目):

<ListBox
  x:Name="lsbQuranData"
  Grid.Row="2" Foreground="Black"
  ScrollViewer.VerticalScrollBarVisibility="Visible"
>
  <ListBox.ItemTemplate>
    <DataTemplate>
      <StackPanel Width="480">
        <local:SuraWithProgressBar
          Width="480"
          SuraNumber ="{Binding SuraNumber, Mode=TwoWay}"
          SuraName="{Binding SuraTName}"
          Tap="DownloadSura"
        ></local:SuraWithProgressBar>
        <Line
          X1="0"
          X2="480"
          Y1="0"
          Y2="0"
          VerticalAlignment="Bottom"
          StrokeThickness="2"
          Stroke="Black"
        />
      </StackPanel>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

按钮点击事件如下:

private void Button_Click(object sender, RoutedEventArgs e)
{
  if (!downloadClicked)
  {
    downloadClicked = true;
    for (int rowIndex = 0; rowIndex < 114; rowIndex++)
    {
      //Download All (Call individual tap event of the user control
    }
  }
  else
    MessageBox.Show("Please wait, downloading...");
}

private void DownloadSura(object sender, System.Windows.Input.GestureEventArgs e)
{

}

如何调用单个用户控件的点击事件?

谢谢!

1 个答案:

答案 0 :(得分:0)

直接我将ListBoxItem的事件处理程序中的代码封装到一个方法中,并从ListBoxItem的事件处理程序或BUtton的事件处理程序中调用此方法。或者我弄错了什么?

编辑:

尝试通过它的x:Name获取ListBox并迭代Items集合。之后你有了ListBoxItem并且可以尝试执行你的行动。我不知道在DataSource.getSelectedReciter();DataSource.addVerseByVerseFiles(Convert.ToByte(SuraNumber), verseByverseFiles, selectedReciter);中会发生什么但是你应该以编程方式提升事件。我觉得这不行。