将焦点设置在Windows Phone 8.1中以编程方式创建的Canvas

时间:2015-12-26 17:25:39

标签: c# canvas windows-phone-8.1 setfocus

我在滚动查看器中有一张地图的图像,并且使用2个画布后,我会在用户选择它们的位置后放置一个小方块(或地图图钉图像)。

现在,因为他们没有"点击"在地图上这样做,但是他们从列表中选择了他们的位置,我需要在滚动查看器中看到地图时将该正方形作为视图的中心。

在我的xaml中,我只有一些事情,因为所有信息都来自API

<Grid x:Name="firstFloor" Margin="0,50,0,0" Visibility="Visible">
            <ScrollViewer x:Name="pruebaScrollViewer1" BringIntoViewOnFocusChange="True" ZoomMode="Enabled" HorizontalScrollBarVisibility="Auto" HorizontalScrollMode="Enabled">
                <Grid x:Name="myMap1stFloor">
                </Grid>
            </ScrollViewer>
</Grid>

在代码背后我有

private void showStorePosition2(string map_id, string name, int width, int height, int tile, int x, int y)
{
        IdOfMapWhereIAm = map_id;

        if (map_id == "10")
        {
            if (!_primerPiso)
            {
                //my parent canvas is defined globally
                //the width and height of it come from API
                myParentCanvas.Width = width;
                myParentCanvas.Height = height;
                myParentCanvas.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Center;
                myParentCanvas.VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Center;
                Debug.WriteLine(width);

                ImageBrush pushpin = new ImageBrush();
                pushpin.ImageSource = new BitmapImage(new Uri("ms-appx:/Imagenes/mappin.png", UriKind.Absolute));                    
                TextBlock storeName = new TextBlock();
                storeName.VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Top;
                storeName.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Left;
                storeName.TextAlignment = TextAlignment.Center;
                storeName.FontFamily = new Windows.UI.Xaml.Media.FontFamily("Open Sans");
                storeName.Height = 20;
                storeName.Width = Double.NaN;
                storeName.FontSize = 15;
                storeName.Text = name;
                storeName.Margin = new Thickness(-20, -20, 0, 0);
                storeName.TextWrapping = TextWrapping.Wrap;
                storeName.Foreground = new SolidColorBrush(Colors.Black);

                Canvas myInititialStore = new Canvas();                    
                myInititialStore.Background = pushpin;
                myInititialStore.Height = 13;
                myInititialStore.Width = 13;
                Canvas.SetTop(myInititialStore, (y) * tile);
                Canvas.SetLeft(myInititialStore, (x) * tile);
                myInititialStore.Children.Add(storeName);

                myParentCanvas.Children.Add(myInititialStore);
                myMap1stFloor.Children.Add(myParentCanvas);
            }
        }
}

我在考虑给myInitialStore一个依赖属性,设置focusProperty,但我也不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

如果有人遇到同样的问题,我找到了一种方法来“关注”我需要的画布:

我没有尝试这样做,而是使用Canvas值更改了scrollviewer中的视图,这样,当在Canvas加载到scrollviewer中时,最后一个自动移动到Canvas所在的位置:

ScrollViewer1.ChangeView(((initialStore_x * tileMapToGo) - (widthMapToGo / tileMapToGo)), ((initialStore_y * tileMapToGo) - (heightMapToGo / tileMapToGo)), 1, false);

希望它有所帮助。此致