SurfaceListbox锁定项目 [英] SurfaceListbox Lock on items
问题描述
我有一个SurfaceListbox 并且项目是水平显示但是当我滚动 通过他们,我希望它不应该在两者之间停止,但总是 锁定 其中一项。非常感谢任何指针
谢谢
Jason
嗨Jason,
for我使用了SurfaceScrollViewer,我没有看到使用SurfaceListBox的任何优势,因为我不需要选择的东西。
< s:SurfaceItemsControl Name =" MySurfaceItemsControl" MinWidth = QUOT; 1024"了minHeight = QUOT; 768" >
&NBSP; &NBSP; < s:SurfaceItemsControl.ItemTemplate>
&NBSP; &NBSP; &NBSP; &NBSP; < DataTemplate>
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < Canvas Width =" 1024"高度="768">
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < Image Source =" {Binding}"宽度= QUOT; 800"高度="600"/>
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < / Canvas>
&NBSP; &NBSP; &NBSP; &NBSP; < / DataTemplate>
&NBSP; &NBSP; < / s:SurfaceItemsControl.ItemTemplate>
&NBSP; &NBSP; < s:SurfaceItemsControl.ItemsPanel>
&NBSP; &NBSP; &NBSP; &NBSP; < ItemsPanelTemplate>
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < StackPanel Orientation =" Horizontal">
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < / StackPanel>
&NBSP; &NBSP; &NBSP; &NBSP; < / ItemsPanelTemplate>
&NBSP; &NBSP; < / s:SurfaceItemsControl.ItemsPanel>
&NBSP; &NBSP; < s:SurfaceItemsControl.Template>
&NBSP; &NBSP; &NBSP; &NBSP; < ControlTemplate>
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < s:SurfaceScrollViewer VerticalScrollBarVisibility ="已禁用
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; PreviewContactUp =" MySurfaceItemsControl_ContactUp"
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; ScrollBar.Scroll =" MySurfaceListBox_Scroll">
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < ItemsPresenter />
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < / s:SurfaceScrollViewer>
&NBSP; &NBSP; &NBSP; &NBSP; < / ControlTemplate>
&NBSP; &NBSP; < / s:SurfaceItemsControl.Template>
< / s:SurfaceItemsControl>
稍后,在ContactUp事件:
private void MySurfaceItemsControl_ContactUp(object sender,ContactEventArgs e)
&NBSP;&NBSP; &NBSP; &NBSP;如果(e.OriginalSource是SurfaceThumb)
< span style ="white-space:pre"> return;
&NBSP; &NBSP; &NBSP; &NBSP; if(e.OriginalSource是SurfaceRepeatButton)
&NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; SurfaceScrollViewer theScrollViewer = UIHelper.FindVisualChildren< SurfaceScrollViewer>(this).First();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; GotoSlide((int)Math.Round(theScrollViewer.HorizontalOffset / 1024));
&NBSP; &NBSP; &NBSP; &NBSP; }
&NBSP; &NBSP; &NBSP; &NBSP; else
&NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; GotoSlide(-1);
&NBSP; &NBSP; &NBSP; &NBSP; }
&NBSP; &NBSP; }
GotoSlide方法进行计算并使用 theScrollViewer .ScrollToHorizontalOffset()平移到相应的幻灯片。
I have a SurfaceListbox and the items are displayed horizontally But when I scroll through them , I would like that it should stop not in between but always lock in one of the items .Any pointers would be greatly appreciated
Thanks
Jason
Hi Jason,
for that I have used a SurfaceScrollViewer, I didn't see any advantage in using the SurfaceListBox because I didnt need the selection stuff.
<s:SurfaceItemsControl Name="MySurfaceItemsControl" MinWidth="1024" MinHeight="768" >
<s:SurfaceItemsControl.ItemTemplate>
<DataTemplate>
<Canvas Width="1024" Height="768">
<Image Source="{Binding}" Width="800" Height="600"/>
</Canvas>
</DataTemplate>
</s:SurfaceItemsControl.ItemTemplate>
<s:SurfaceItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal">
</StackPanel>
</ItemsPanelTemplate>
</s:SurfaceItemsControl.ItemsPanel>
<s:SurfaceItemsControl.Template>
<ControlTemplate>
<s:SurfaceScrollViewer VerticalScrollBarVisibility="Disabled"
PreviewContactUp="MySurfaceItemsControl_ContactUp"
ScrollBar.Scroll="MySurfaceListBox_Scroll">
<ItemsPresenter/>
</s:SurfaceScrollViewer>
</ControlTemplate>
</s:SurfaceItemsControl.Template>
</s:SurfaceItemsControl>
Later, in the ContactUp event:
private void MySurfaceItemsControl_ContactUp(object sender, ContactEventArgs e)
{
if (e.OriginalSource is SurfaceThumb)
return;
if (e.OriginalSource is SurfaceRepeatButton)
{
SurfaceScrollViewer theScrollViewer = UIHelper.FindVisualChildren<SurfaceScrollViewer>(this).First();
GotoSlide((int)Math.Round(theScrollViewer.HorizontalOffset / 1024));
}
else
{
GotoSlide(-1);
}
}
The GotoSlide method makes its calculations and uses theScrollViewer.ScrollToHorizontalOffset() to pan to the appropriate slide.
这篇关于SurfaceListbox锁定项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!