C# 获取启动弹出按钮的按钮
我有一个GridView,里面有一个按钮和一个弹出按钮。在MenuFlyoutItems上有两个方法,我需要知道调用弹出按钮的按钮属性。有办法吗?C# 获取启动弹出按钮的按钮,c#,xaml,win-universal-app,C#,Xaml,Win Universal App,我有一个GridView,里面有一个按钮和一个弹出按钮。在MenuFlyoutItems上有两个方法,我需要知道调用弹出按钮的按钮属性。有办法吗? 我的代码: <Button Content="{x:Bind Text}" Name="{x:Bind Id}"> <Button.Flyout> <MenuFlyout Placement="Bottom"> <Men
我的代码:
<Button Content="{x:Bind Text}" Name="{x:Bind Id}">
<Button.Flyout>
<MenuFlyout Placement="Bottom">
<MenuFlyoutItem Text="Remove" Click="Remove_Click" />
<MenuFlyoutSeparator/>
<MenuFlyoutItem Text="Select" Click="Select_Click"/>
</MenuFlyout>
</Button.Flyout>
</Button>
对不起,我不能确定,但您可以这样尝试:
private void Remove_Click(object sender, RoutedEventArgs e)
{
MenuFlyoutItem mfi = (MenuFlyoutItem)sender;
var datacontext = mfi.DataContext;
Button item = grd.ContainerFromItem(datacontext) as Button;
}
其中grd是您的GridView的名称对不起,我不能确定,但您可以这样尝试:
private void Remove_Click(object sender, RoutedEventArgs e)
{
MenuFlyoutItem mfi = (MenuFlyoutItem)sender;
var datacontext = mfi.DataContext;
Button item = grd.ContainerFromItem(datacontext) as Button;
}
其中grd是GridView的名称
ContainerFromItem
returnGridViewItem
。可以使用VisualTreeHelper获取按钮元素
private void Remove_Click(object sender, RoutedEventArgs e)
{
MenuFlyoutItem mfi = (MenuFlyoutItem)sender;
var datacontext = mfi.DataContext;
GridViewItem item = grd.ContainerFromItem(datacontext) as GridViewItem ;
Button button = FindElementInVisualTree<Button>(item);
}
private T FindElementInVisualTree<T>(DependencyObject parentElement) where T : DependencyObject
{
var count = VisualTreeHelper.GetChildrenCount(parentElement);
if (count == 0) return null;
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(parentElement, i);
if (child != null && child is T)
return (T)child;
else
{
var result = FindElementInVisualTree<T>(child);
if (result != null)
return result;
}
}
return null;
}
private void Remove\u单击(对象发送方,路由目标)
{
MenuFlyoutItem mfi=(MenuFlyoutItem)发送方;
var datacontext=mfi.datacontext;
GridViewItem=grd.ContainerFromItem(datacontext)作为GridViewItem;
按钮按钮=FindElementInVisualTree(项目);
}
私有T FindElementInVisualTree(DependencyObject parentElement),其中T:DependencyObject
{
var count=VisualTreeHelper.GetChildrenCount(parentElement);
if(count==0)返回null;
for(int i=0;i
ContainerFromItem
返回GridViewItem
。可以使用VisualTreeHelper获取按钮元素
private void Remove_Click(object sender, RoutedEventArgs e)
{
MenuFlyoutItem mfi = (MenuFlyoutItem)sender;
var datacontext = mfi.DataContext;
GridViewItem item = grd.ContainerFromItem(datacontext) as GridViewItem ;
Button button = FindElementInVisualTree<Button>(item);
}
private T FindElementInVisualTree<T>(DependencyObject parentElement) where T : DependencyObject
{
var count = VisualTreeHelper.GetChildrenCount(parentElement);
if (count == 0) return null;
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(parentElement, i);
if (child != null && child is T)
return (T)child;
else
{
var result = FindElementInVisualTree<T>(child);
if (result != null)
return result;
}
}
return null;
}
private void Remove\u单击(对象发送方,路由目标)
{
MenuFlyoutItem mfi=(MenuFlyoutItem)发送方;
var datacontext=mfi.datacontext;
GridViewItem=grd.ContainerFromItem(datacontext)作为GridViewItem;
按钮按钮=FindElementInVisualTree(项目);
}
私有T FindElementInVisualTree(DependencyObject parentElement),其中T:DependencyObject
{
var count=VisualTreeHelper.GetChildrenCount(parentElement);
if(count==0)返回null;
for(int i=0;i
不要将其强制转换为按钮。如果我没有错,我希望ContainerFromItem返回GridViewItem。检查一下,让我知道是的,可能吧。不幸的是,我现在不能检查。“希望”为你指明了正确的方向。它并没有,演员是需要的,否则会产生错误。不要把它投给巴顿。如果我没有错,我希望ContainerFromItem返回GridViewItem。检查一下,让我知道是的,可能吧。不幸的是,我现在不能检查。希望为你指明了正确的方向。它没有,需要演员阵容,否则会产生错误。