我想访问MouseDown事件中的Button,我有以下内容:
XAML:
<ItemsControlx:Name="icName" MouseDown="icItems_MouseDown" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button x:Name="btnName" Tag="{Binding ItemName}"</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
C#:
private void icName_MouseDown(object sender, MouseButtonEventArgs e)
{
???
}
如何从ItemsControl MouseDown事件
访问该按钮ex:MessageBox.Show(ItemName);
由于
答案 0 :(得分:1)
请参阅以下示例代码。
connect(spinboxObject, QOverload<int>::of(&QSpinBox::valueChanged), this, [this](int newValue) { });
private void icName_MouseDown(object sender, MouseButtonEventArgs e)
{
ContentPresenter cp = e.OriginalSource as ContentPresenter;
if (cp != null && VisualTreeHelper.GetChildrenCount(cp) > 0)
{
Button button = VisualTreeHelper.GetChild(cp, 0) as Button;
//do whatever you want with the Button here...
if (button != null && button.Tag != null)
MessageBox.Show(button.Tag.ToString());
}
}
答案 1 :(得分:0)
如果您不需要访问按钮,而只需要绑定项目中的项目名称,那么我个人将在数据模板中添加处理程序,下面使用的是网格。
<ItemsControl x:Name="icName" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid MouseDown="icItems_MouseDown" />
<Button x:Name="btnName" Tag="{Binding ItemName}"</Button>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
然后,您可以从处理程序中访问数据上下文。
private void icName_MouseDown(object sender, MouseButtonEventArgs e)
{
var item = (YourItemType)((FrameworkElement)sender).DataContext;
var itemName = item.ItemName;
}
您也不需要标签
答案 2 :(得分:-1)
您无法处理一组按钮上的点击,并知道点击了哪一个按钮。您应该使用相同的处理程序处理每个按钮的单击:
<Button x:Name="btnName" Tag="{Binding ItemName}" MouseDown="icItem_MouseDown"></Button>
然后sender
是调用按钮:
private void icItem_MouseDown(object sender, MouseButtonEventArgs e)
{
var btn = sender as Button;
if(btn!=null)
MessageBox.Show(btn.Tag);
}