我陷入了一种情况,我想在列表框中调用我的用户控件的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)
{
}
如何调用单个用户控件的点击事件?
谢谢!
答案 0 :(得分:0)
直接我将ListBoxItem
的事件处理程序中的代码封装到一个方法中,并从ListBoxItem
的事件处理程序或BUtton
的事件处理程序中调用此方法。或者我弄错了什么?
编辑:
尝试通过它的x:Name获取ListBox
并迭代Items
集合。之后你有了ListBoxItem
并且可以尝试执行你的行动。我不知道在DataSource.getSelectedReciter();
或DataSource.addVerseByVerseFiles(Convert.ToByte(SuraNumber), verseByverseFiles, selectedReciter);
中会发生什么但是你应该以编程方式提升事件。我觉得这不行。