Windows phone 7 滚动时,将scroll viewer中的stackpanel项目停止在显示屏左侧

Windows phone 7 滚动时,将scroll viewer中的stackpanel项目停止在显示屏左侧,windows-phone-7,silverlight-4.0,windows-phone-7.1,Windows Phone 7,Silverlight 4.0,Windows Phone 7.1,我在scrollviewer内的stackpanel中水平添加了10个图像。当用户刷卡页面时,ScReVIEW停止在某个位置,如果在2个图像的中间停止滚动,如下面显示的第一个图像,我想设置3号的图像,以自动滚动,并与第二个图像中的屏幕左侧相匹配。 for (int i = 0; i <= 9; i++) { Uri uri = new Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i +

我在scrollviewer内的stackpanel中水平添加了10个图像。当用户刷卡页面时,ScReVIEW停止在某个位置,如果在2个图像的中间停止滚动,如下面显示的第一个图像,我想设置3号的图像,以自动滚动,并与第二个图像

中的屏幕左侧相匹配。
for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}

for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}

for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}

for(int i=0;i这可能不是最好的解决方案,我相信有更好的方法来实现这一点,但您可以使用以下方法:-

for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}
XAML:-

for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}
    <ListBox x:Name="MyListBox"
            ScrollViewer.VerticalScrollBarVisibility="Disabled"
            ScrollViewer.HorizontalScrollBarVisibility="Visible">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

C#:-

for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}
DispatcherTimer myTimer=newdispatchertimer();
//建造师
公共主页()
{
初始化组件();
对于(int i=0;i<10;i++)
{
MyListBox.Items.Add(新建按钮()
{
Content=i.ToString(),
宽度=200,
高度=100,
});
MyListBox.MouseMove+=新的MouseEventHandler(MyListBox\u MouseMove);
}
myTimer.Interval=TimeSpan.FromSeconds(1);
myTimer.Tick+=新事件处理程序(myTimer\u Tick);
}
私有void myTimer_Tick(对象发送方,事件参数e)
{
myTimer.Stop();
SnapFirstItem();
}       
私有void MyListBox\u MouseMove(对象发送方,MouseEventArgs e)
{
myTimer.Stop();
myTimer.Start();
}
私有void SnapFirstItem()
{
foreach(MyListBox.Items中的按钮currentButton)
{
bool visible=MyListBox.TestVisibility(currentButton,System.Windows.Controls.Orientation.Horizontal,true);
如果(可见)
{
MyListBox.ScrollIntoView(当前按钮);
打破
}
}
}
TestVisibility扩展方法来自以下内容:-

for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}

这可能不是最好的解决方案,我相信有更好的方法来实现这一点,但您可以使用以下方法:-

for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}
XAML:-

for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}
    <ListBox x:Name="MyListBox"
            ScrollViewer.VerticalScrollBarVisibility="Disabled"
            ScrollViewer.HorizontalScrollBarVisibility="Visible">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

C#:-

for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}
DispatcherTimer myTimer=newdispatchertimer();
//建造师
公共主页()
{
初始化组件();
对于(int i=0;i<10;i++)
{
MyListBox.Items.Add(新建按钮()
{
Content=i.ToString(),
宽度=200,
高度=100,
});
MyListBox.MouseMove+=新的MouseEventHandler(MyListBox\u MouseMove);
}
myTimer.Interval=TimeSpan.FromSeconds(1);
myTimer.Tick+=新事件处理程序(myTimer\u Tick);
}
私有void myTimer_Tick(对象发送方,事件参数e)
{
myTimer.Stop();
SnapFirstItem();
}       
私有void MyListBox\u MouseMove(对象发送方,MouseEventArgs e)
{
myTimer.Stop();
myTimer.Start();
}
私有void SnapFirstItem()
{
foreach(MyListBox.Items中的按钮currentButton)
{
bool visible=MyListBox.TestVisibility(currentButton,System.Windows.Controls.Orientation.Horizontal,true);
如果(可见)
{
MyListBox.ScrollIntoView(当前按钮);
打破
}
}
}
TestVisibility扩展方法来自以下内容:-

for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}

您需要做的第一件事是检测哪个项目重叠在屏幕的一侧。为此,在
堆栈面板
中迭代每个项目,并确定它们相对于屏幕上某个固定位置的其他元素的位置

for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}
为此,我使用以下扩展方法:

for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}
/// <summary>
/// Gets the relative position of the given UIElement to this.
/// </summary>
public static Point GetRelativePosition(this UIElement element, UIElement other)
{
    return element.TransformToVisual(other)
                  .Transform(new Point(0, 0));
}
使用每个项目的位置,您应该能够确定哪个项目与屏幕重叠

for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}

然后,您需要计算您需要滚动多少以确保项目完全可见,然后使用
ScrollViewer.ScrollToVerticalOffset
滚动到该位置。

您需要做的第一件事是检测哪个项目与屏幕的一侧重叠。要做到这一点,请在
S中的每个项目上进行迭代钉住面板
,并确定它们相对于屏幕上某个固定位置的其他元素的位置

for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}
为此,我使用以下扩展方法:

for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}
/// <summary>
/// Gets the relative position of the given UIElement to this.
/// </summary>
public static Point GetRelativePosition(this UIElement element, UIElement other)
{
    return element.TransformToVisual(other)
                  .Transform(new Point(0, 0));
}
使用每个项目的位置,您应该能够确定哪个项目与屏幕重叠

for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}

然后,您需要计算需要滚动多少以确保项目完全可见,然后使用
ScrollViewer.ScrollToVerticalOffset
滚动到该位置。

UIElement“other”是什么您在此处声明确定…GetRelativePosition允许您查找一个元素相对于另一个元素的位置。您的ScrollViewer中有滚动的内容,因此您需要使用此滚动区域之外的其他元素。您可以使用“根”元素,即
Application.Current.RootVisual
我希望您的解决方案能够uld可以解决这个问题。但我是一个初学者,所以你能给我一些示例代码或示例链接来了解一下吗this@SENTHILKUMAR抱歉,伙计-我没有时间为您编写代码。抱歉,如果有关于此概念或模型的任何web链接,请在有时间的情况下发送。这里是我键入Poi时找不到GetRelativePosition方法nt位置=堆栈。UIElement“other”是什么您在此处声明确定…GetRelativePosition允许您查找一个元素相对于另一个元素的位置。您的ScrollViewer中有滚动的内容,因此您需要使用此滚动区域之外的其他元素。您可以使用“根”元素,即
Application.Current.RootVisual
我希望您的解决方案能够uld可以解决这个问题。但我是一个初学者,所以你能给我一些样本代码或样本链接到哥特吗
for (int i = 0; i <= 9; i++)
{
    Uri uri = new  Uri("http://d1mu9ule1cy7bp.cloudfront.net//catalogues/47/pages/p_" + i + "/thump.jpg");
    ImageSource img1 = new BitmapImage(uri);
    Image rect = new Image { RenderTransform = new TranslateTransform() };

    rect.Source = img1;

    stack.Children.Add(rect);

}