windows phone (23) ScrollViewer元素

來源:互聯網
上載者:User

 

ScrollViewer類表示可包含其他可見元素的可捲動區域,一般會用在螢幕的寬度和高度不夠用時,作為一種延伸使用,參考書上稱之為捲軸,在預設的情況下垂直捲軸是可見的,水平捲軸不顯示,即VerticalScrollBarVisibility和HorizontalScrollBarVisibility兩個屬性,這兩個屬性的值是ScrollBarVisibility枚舉成員【作者:神舟龍】

Visible 顯示捲軸;Hidden不顯示捲軸;Auto 需要時顯示;Disabled 可見但是不響應觸摸事件,這兩個屬性也正是下面會用到的,下面樣本中把程式標題給更改了,為了顯示更好的效果

xaml代碼:

 <!--TitlePanel 包含應用程式的名稱和網頁標題-->        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">                        <StackPanel.Resources>                <Style x:Key="stStyle" TargetType="TextBlock">                    <Setter Property="TextTrimming" Value="WordEllipsis"></Setter>                    <Setter Property="FontSize" Value="23"></Setter>                    <Setter Property="Foreground" Value="BlueViolet"></Setter>                    <Setter Property="HorizontalAlignment" Value="Center"></Setter>                </Style>            </StackPanel.Resources>            <TextBlock x:Name="ApplicationTitle" Text="笑一笑" Style="{StaticResource stStyle}"/>        </StackPanel>

可以看到的是我們自訂了樣式,這裡定義的原則是先定義再使用,即上面代碼中的textblock 不能再樣式之上,如果這樣系統就會報錯;

內容地區的xaml代碼:

<!--ContentPanel - 在此處放置其他內容-->        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">            <Grid.Resources>                <Style x:Key="paragraphStyle" TargetType="TextBlock">                    <Setter Property="TextWrapping" Value="Wrap"></Setter>                    <Setter Property="Margin" Value="5"></Setter>                    <Setter Property="FontSize" Value="19"></Setter>                </Style>            </Grid.Resources>            <ScrollViewer Padding="5" >                <StackPanel>                    <TextBlock Style="{ StaticResource paragraphStyle}">                       一天中午下班,由於天氣挺好.大家就在食堂打了飯一起在外面吃飯.                        我就問了,用什麼方法修理別人最慘,大家都在一起笑談自己的看法.<LineBreak/>                      一會就見我侄女打著飯來了,她開口就問:你們在聊什麼啊?我就說:如果你恨一個人,                        你認為用什麼方法可以修理的他最慘.她張口就說:找人海扁他一頓,我就說了:                        皮肉之傷過幾天就好了,這有什麼.她又說了:找幾個人狠狠的羞辱他一番,呵呵!心靈上的創傷,                        隨著時間流逝,也會慢慢的好起來的.我說不算什麼?當時她一聽,把手裡的碗往花台上一放,雙手往腰間一插,右手往上一指,                        嘿嘿!嫁給他!我當時無語了,她說:我用一生來折磨他還不夠嗎?<LineBreak/>                     從那以後她多了一個外號叫(二莽)                    </TextBlock>                    <Line  StrokeThickness="9" Stroke="Blue"  X1="0" Y1="20" X2="480" Y2="20"></Line>                    <TextBlock Style="{StaticResource paragraphStyle}">                        <Run> 一對年輕人談戀愛,男的想試探女的是否能做到守身如玉,便問女友道:“如果你深夜一人在街上走,突然來了一個男人要和你親嘴,你怎麼辦?”                         女友答道:“我會反抗,並打他一個耳光。”                         男的又問:“如果又來一個喝醉酒了的男人一下子要抱住你,你怎麼辦?”                         女友答道:“我會全力反抗,不讓他得逞。”                         男的聽了,高興地連連點頭,繼續問道:“假如又走來一個很帥的男人,向你提出那種要求,你怎麼辦?”                         女友聽了,回答說:“你要知道,                       </Run>                        <Run FontStyle="Italic">一個女人的反抗畢竟是有限的!” </Run>                    </TextBlock>                    <Line Stroke="Blue" StrokeThickness="9"  X1="0" Y1="20" X2="480" Y2="20"></Line>                    <TextBlock x:Name="tb3" Style="{StaticResource paragraphStyle }">                        收到一條簡訊:“今日15點31分開始起,我老婆就要開始陪別人的老公睡啦,我還得幸福的伺候著洗漱更衣沐浴,沒辦法他帶槍來的。”看了百思不得其解,咋會有這麼賤的人。後來一看發信人,我了個去,生孩子居然有這樣報喜的!                    </TextBlock>                </StackPanel>                            </ScrollViewer>        </Grid>

可以看到這裡也有用到自訂樣式,內外邊距分別是5,書上說這樣有利於閱讀,不過看到效果後,確實感覺不錯;代碼中用到的stackPanel預設為垂直分布,你可以設定Orientation="Horizontal"為水平方向對子項目進行排列;在每個段落之前都有Unicode字元“ ” 表示所在行縮排一個字元的寬度

 Line類

上面代碼中還使用Line,在兩個點之間繪製一條直線 ,需要滿足的基本屬性是X1,X2,Y1,Y2其中X1,Y1作為起點,X2,Y2作為終點,並以此進行串連成一條直線;可以使用Stroke設定顏色,並使用StrokeThickness設定顯示的粗細,這裡為了效果,設定的比較粗;

看吧:

 

 ScrollViewer預設垂直是顯示的,所以效果如上,那麼我們設定水平捲軸顯示效果會如何那;直接在scrollviewer標籤中加HorizontalScrollBarVisibility="Visible"即可,代碼不在貼出,直接來效果吧

 

這裡需要注意的是我們在樣式中已經設定了自動換行,但是因為我們設定水平捲軸顯示,所以字行換行的行的概念也就沒有了;但是我想知道如果文字不換行的情況下,水平方向上顯示的文字是多長,事實或許並不是我們想象中的那麼好

 

當捲軸走到大概一半不到時,上面的文字已經不顯示了,所以如果文字太長,即使設定了顯示水平捲軸,也不會完全顯示,這是一種極端的情況,一般也不會用到

 那麼水平捲動區域寬度時多少那,加了個觸摸完成事件

 private void sv1_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)        {            this.ApplicationTitle.Text = "水平捲動區域寬度:" + sv1.ScrollableWidth.ToString();        }

 

 版本7.0和7.1的差別:

 

行為

Windows Phone OS 7.0 app/Windows Phone OS 7.0
裝置

 

Windows Phone OS 7.0 or Windows Phone OS 7.1 app/Windows Phone OS 7.1
裝置

ScrollViewer 在滾動期間在 UI 線程上更新屬性

屬性在值更改時即更新。

屬性在使用者舉起手指時更新,或當使用者在任何方向拖動、搖動,或輕擊螢幕 1/4 時更新。

 

ManipulationDelta
內拖動時 UI 線程上引發的事件
ScrollViewer。

通過 ScrollViewer 中的元素處理事件。

由於事件處於輸入線程上,這些事件不會引發。

 

 

 

 

第一個還好理解,第二個我的理解是因為有滾動,所以觸摸移動是事件ManipulationDelta不會被引發,這樣就證明了剛剛我是用該事件擷取水平滾動寬度得到值為0,

 

如果應用程式依賴於 Windows Phone OS 7.0 行為,您可以取消效能改進通過在與ListBox關聯的
ScrollViewer上,將
ManipulationMode 屬性設定為
Control。 下面的程式碼範例示範具體做法。

<ListBox ItemsSource="{Binding Items}" ScrollViewer.ManipulationMode ="Control" Height="652" Canvas.Top="80">

 

五一假到了,放鬆一下吧

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.