我有一個ScrollViewer中,我想動畫顯示的垂直滾動條的方式。滾動條設置爲AUTO,所以我希望它在需要時淡入淡出,不需要時淡出。 我知道如何鑽入模板並更改顏色和外觀,但是我可以進行如下更改嗎?的Silverlight的ScrollViewer - 淡入出滾動條
2
A
回答
5
這是一個有趣的問題。由於Scrollbar和ScrollViewer被封閉,這是一個挑戰。 (我想使用Reflector製作一個ScrollViewer的副本,但這裏只有一個XAML解決方案)。
當我聽到動畫,我覺得狀態。如果ScrollViewer使用狀態來實現,那將會很不錯,但不幸的是,它不是。通過使用DataStateBehavior,我們可以創建一個屬性 - 在這種情況下,爲ComputedVerticalScrollBarVisibility屬性聲明狀態。出於某種原因,使用TemplateBinding無法將DataStateBehavior綁定到ScrollViewer的ComputedVerticalScrollBarVisibility。 (誰知道爲什麼?)我是能夠綁定到VerticalScrollbar可見性屬性,但我決定不: 爲了使淡出的工作,我不想VerticalScrollbar.Visibility仍然被綁定到ComputedVerticalScrollBarVisibility因爲如果是這樣的話,那麼滾動條會在物業發生變化時立即消失。相反,我使用VerticalScrollbar標籤屬性來保存ComputedVerticalScrollBarVisibility並將DataStateBehavior綁定到VerticalScrollbar標籤。
現在的狀態很到位,這是一件容易的事情來設置每個狀態的不透明度和狀態轉換時間和瞧!你在ScrollViewer中淡入。
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" x:Class="SilverlightApplication5.MainPage"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<UserControl.Resources>
<Style x:Key="ScrollViewerStyle1" TargetType="ScrollViewer">
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="VerticalContentAlignment" Value="Top"/>
<Setter Property="VerticalScrollBarVisibility" Value="Visible"/>
<Setter Property="Padding" Value="4"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush">
<Setter.Value>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFA3AEB9" Offset="0"/>
<GradientStop Color="#FF8399A9" Offset="0.375"/>
<GradientStop Color="#FF718597" Offset="0.375"/>
<GradientStop Color="#FF617584" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ScrollViewer">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="VisualStateGroup">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:0.5"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="VerticalVisible">
<Storyboard>
<DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="VerticalScrollBar" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
<VisualState x:Name="VerticleHidden">
<Storyboard>
<DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="VerticalScrollBar" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid Background="{TemplateBinding Background}">
<i:Interaction.Behaviors>
<ei:DataStateBehavior Binding="{Binding Tag, ElementName=VerticalScrollBar}" Value="Visible" TrueState="VerticalVisible" FalseState="VerticleHidden"/>
</i:Interaction.Behaviors>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ScrollContentPresenter x:Name="ScrollContentPresenter" Cursor="{TemplateBinding Cursor}" ContentTemplate="{TemplateBinding ContentTemplate}" Margin="{TemplateBinding Padding}"/>
<Rectangle Grid.Column="1" Fill="#FFE9EEF4" Grid.Row="1"/>
<ScrollBar x:Name="VerticalScrollBar" Grid.Column="1" IsTabStop="False" Maximum="{TemplateBinding ScrollableHeight}" Margin="0,-1,-1,-1" Minimum="0" Orientation="Vertical" Grid.Row="0" Tag="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{TemplateBinding VerticalOffset}" ViewportSize="{TemplateBinding ViewportHeight}" Width="18"/>
<ScrollBar x:Name="HorizontalScrollBar" Grid.Column="0" Height="18" IsTabStop="False" Maximum="{TemplateBinding ScrollableWidth}" Margin="-1,0,-1,-1" Minimum="0" Orientation="Horizontal" Grid.Row="1" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{TemplateBinding HorizontalOffset}" ViewportSize="{TemplateBinding ViewportWidth}"/>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="Beige">
<ScrollViewer VerticalScrollBarVisibility="Auto" Style="{StaticResource ScrollViewerStyle1}">
<Rectangle Margin="10" Fill="LightBlue" MinHeight="300" />
</ScrollViewer>
</Grid>
</UserControl>
要運行此操作,請運行此代碼並縮小瀏覽器窗口。滾動條將淡入視圖。
相關問題
- 1. XAML ScrollViewer滾動條隱藏問題(Silverlight)
- 2. Superscrollorama淡入/淡出滾動
- 3. JQuery的淡入/淡出鼠標滾動
- 4. 在iOS上的滾動淡入淡出
- 5. jQuery的淡入淡出滾動翻頁
- 6. 的Silverlight的ScrollViewer進行滾動
- 7. Silverlight scrollviewer的滾動條在不活動時不可見
- 8. 淡入/淡出動畫導致ScrollViewer的內容模糊
- 9. 如何將ScrollViewer的滾動條粘貼到Silverlight的頂部?
- 10. jQuery - 淡入淡出滾動/淡入淡出「scrollstop」
- 11. Silverlight ScrollViewer
- 12. ScrollViewer滾動條過早出現
- 13. Silverlight 4 stackpanel淡入/淡出
- 14. 在Vista中停止滾動條淡入淡出(.NET或WinAPI)
- 15. ScrollViewer +滾動條箭頭
- 16. 淡入淡出UITextView滾動uiscrollview
- 17. 關於滾動淡入淡出div
- 18. 在jQuery上滾動淡入淡出div
- 19. 分區淡入和淡出在滾動
- 20. 滾動頁面時淡入淡出div
- 21. 淡入/淡出滾動菜單
- 22. SuperScrollOrama和TweenMax淡入淡出滾動
- 23. 淡入淡出Silverlight中的路徑?
- 24. 使用jquery滾動時淡入淡出
- 25. 淡出滾動
- 26. ScrollViewer中的滾動條大小
- 27. ScrollViewer中的Safari-Like滾動條
- 28. 淡入淡出的滾動不工作在移動
- 29. 用Javascript滾動的Navbar淡入淡出動畫
- 30. 鉻淡入滾動條問題
首先,它的工作原理!驚人 !我想了解這個解決方案。你能解釋更多關於DataStateBehavior的內容嗎?什麼是VerticalScrollbar標籤屬性,你爲什麼需要它? – 2011-03-20 23:03:13
每個FrameworkElement都有一個Tag屬性(類型爲Object),從WinForms天開始。它只是一個地方,你可以存儲的東西沒有繼承。 :-)因爲我刪除從VerticalScrollbar.Visibility到ComputedVerticalScrollBarVisibility的結合,我需要綁定CVSBV以標籤爲「持有它」在DataStateBehavior綁定到(因爲TemplateBinding到CVSBV沒有工作)。 – foson 2011-03-21 01:48:30
如果您仍有問題,請在http://chat.stackoverflow.com/rooms/640/silverlight找到我 – foson 2011-03-21 14:44:54