根据位置windows phone 8获得控制权

时间:2013-11-24 18:14:31

标签: c# windows-phone-8 windows-phone coordinates parent-child

我试图找出我按下哪个控件,当我按下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,当我按下它时我想找到它的名字/标题,我认为这是最好的方式(如果我错了,请纠正我)

3 个答案:

答案 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);
    }