[Windows Phone 7] Mango 密記– 改變 ListBox 捲動
2012-10-05
在UI控制上面,有時候必須要能夠控制捲動..
包含很多手勢改變數值的部分..都會需要使用到..
曾經有篇文章討論過.. [Windows Phone 7]取得 ListBox 捲動數值
這篇來討論一下如何更改…
左邊有一個直的ListBox 裡面有TextBlock 0~100 按下"捲到50"的按鈕後,他會移到那個位置…
首先我們會宣告兩個變數
/// <summary>
/// 抓住ListBox中的ScrollViwer
/// </summary>
private ScrollViewer _SViewer;
/// <summary>
/// 抓住ListBox中的Scroll
/// </summary>
private ScrollBar _SCroll;
宣告兩隻指標,讓之後可以抓住 ListBox中的ScrollView 還有ScrollBar ..
void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
{
List<ScrollViewer> scrollBarViewer = GetVisualChildCollection<ScrollViewer>(listBoxMain);
///下列幾行負責抓取數值
_SViewer = scrollBarViewer[0];
// 取得 listBoxMain 中的 ScrollBar
List<ScrollBar> scrollBarList = GetVisualChildCollection<ScrollBar>(listBoxMain);
foreach (ScrollBar scrollBar in scrollBarList)
{
// 如果是垂直的 ScrollBar 加入此事件
if (scrollBar.Orientation == System.Windows.Controls.Orientation.Vertical)
{
scrollBar.ValueChanged += new RoutedPropertyChangedEventHandler<double>(scrollBar_ValueChanged);
_SCroll = scrollBar;
}
else // 此為橫向的
{
}
}
for (int i = 0; i <= 100; i++)
{
this.listBoxMain.Items.Add(new TextBlock { Text=i+"",Height=200} );
}
}
在LayoutRoot Loaded 事件時,將 _SViewer , _SCroll 都指向 ListBox 中的 ScrollBar 還有ScrollViewer 之後..
下面兩個function 是去抓取ListBox 中VisaulChild 部分
public static List<T> GetVisualChildCollection<T>(object parent) where T : UIElement
{
List<T> visualCollection = new List<T>();
GetVisualChildCollection(parent as DependencyObject, visualCollection);
return visualCollection;
}
private static void GetVisualChildCollection<T>(DependencyObject parent, List<T> visualCollection) where T : UIElement
{
int count = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < count; i++)
{
DependencyObject child = VisualTreeHelper.GetChild(parent, i);
if (child is T)
{
visualCollection.Add(child as T);
}
else if (child != null)
{
GetVisualChildCollection(child, visualCollection);
}
}
}
這樣 我們就可以透過.. ScrollToVerticalOffset 去設定垂直的數值…
private void btnTest1_Click(object sender, RoutedEventArgs e)
{
_SViewer.ScrollToVerticalOffset(50);
}
當然還有 ScrollToHorizontalOffset 這樣就可以自行控制,ListBox捲動..
在UI控制上面會變得很方便… 當然沒有做滑動的控制,只需要加上timer 就會有滑動的效果..
參考範例:
標籤:
C#
,
Silverlight
,
WindowsPhone
-- Yesterday I wrote down the code. I bet I could be your hero. I am a mighty little programmer. 如果這篇文章有幫助到您,簡單留個言,或是幫我按個讚,讓我有寫下去的動力...