我试图找出我按下哪个控件,当我按下Windows Phone 8中的StackPanel内的控件时。我试图查看Control.GetChildAtPoint方法,但我没有找到对Windows有用的东西电话8,仅适用于Windows Forms。我试过这个:
StackPanel.getChildAtPoint(and so on)
MainPage.getChildAtPoint(and so on)
this.getChildAtPoint(and so on)
但这些方法都不会显示在通常出现在Visual Studio中的代码下拉窗口中。如何在按下时在StackPanel内找到控件?
StackPanel中只有来自Telerik控件的HubTiles,当我按下它时我想找到它的名字/标题,我认为这是最好的方式(如果我错了,请纠正我)
答案 0 :(得分:1)
试试这个,可能会对你有帮助。当你点击控制。让它成为堆栈面板然后在堆栈面板点击事件后面得到它的孩子。检查下面。
private void StackPanel_Tap_1(object sender, GestureEventArgs e)
{
StackPanel panel = sender as StackPanel;
foreach( var child in panel.Children)
{
if ( child is HubTile)
{
// This hubtile is the control inside StackPanel.
HubTile hubTile = child as HubTile;
// Now you can access it properties.
string name = hubTile.Name;
}
}
}
答案 1 :(得分:0)
您应该将HubTiles放置为ListBox / RadDataBoundListBox的项目。在这种情况下,StackPanel是错误的控件。然后,您可以使用这些的SelectionChanged / ItemClicked函数来获取绑定数据。
编辑:
<ListBox ItemsSource="{Binding}" DataTemplate="{StaticResource hubtileTemplate}">
然后创建一个类(我将称之为MyHubTileItem),其中包含tile中所需数据的属性。 (MVVM)
在后面的代码中,您应该创建一个MyHubTileItem内容列表,将其填入您的数据并将其设置为您的DataContext。 在您的资源中(我建议app.xaml)将Hubtile定义为您的DataTemplate。
在此之后你应该可以使用ListBox的SelectionChanged事件来获取所选项目的标题。
MyHubTileItem x = ((ListBox)sender).SelectedItem as MyHubTileItem;
String title = x.Title;
型号:
public sealed class MyHubTileItem
{
public MyHubTileItem(){}
public String Title {get; set;}
public int Count {get; set;}
public String Message {get; set;}
...
}
对于DataTemplate,将以下内容添加到app.xaml中的<Application.Resources>
部分
<DataTemplate x:Key="hubtileTemplate">
<telerik:RadHubTile Title="{Binding Title}" Message="{Binding Message}" .../>
</DataTemplate>
答案 2 :(得分:0)
我实际上设法轻松检索它的数据,没有任何混乱或大量的代码。我使用了ListBox,当用户添加了它时,我添加了Hubtiles。
然后我用这段代码检索HubTiles标题 - 就像那个简单
private void MainListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//MainListBox was tapped get the name of the HubTile
var current = mainListBox.SelectedItem as HubTile;
MessageBox.Show(current.Title);
}