がこれを行うには2通りあり、一つは理解しやすいかもしれもっとWPF様およびその他のです。
アプローチ1.
使用ScrollViewer
し、必要に応じて、それのスタイルを変更。 WPFのようなアプローチ - スクロールする必要がありますので、ScrollViewer
を使用し、カスタムの外観やレイアウトが必要です - そのテンプレートを再定義してください。
<ScrollViewer>
<ScrollViewer.Template>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<ScrollBar Grid.Row="0"
x:Name="PART_VerticalScrollBar"
Width="{TemplateBinding ActualWidth}"
Orientation="Vertical">
<ScrollBar.Template>
<ControlTemplate TargetType="{x:Type ScrollBar}">
<StackPanel Orientation="Horizontal">
<RepeatButton Content="Up"
Margin="2"
Command="ScrollBar.LineUpCommand"/>
<RepeatButton Content="Down"
Margin="2"
Command="ScrollBar.LineDownCommand"/>
</StackPanel>
</ControlTemplate>
</ScrollBar.Template>
</ScrollBar>
<ScrollContentPresenter Grid.Row="1"
x:Name="PART_ScrollContentPresenter" />
</Grid>
</ControlTemplate>
</ScrollViewer.Template>
<WrapPanel x:Name="MyContent">
<!-- your data items are here -->
</WrapPanel>
</ScrollViewer>
アプローチ2.
もっと簡単な解決策 - コンテンツをスクロールする方法を記述して、ボタンのクリックイベントハンドラから呼び出す(またはICommandの中でそれをラップ)。 Storyboard
を使用してスムーズなスクロールにアニメーション効果を適用することができます。
は、以下のシンプルなレイアウトを(それがボタンをアップ/ダウンは含まれていません - あなたが好きなようにそれらを配置、ここではそれらについて何も特別な)を使用してください:Canvas.Top
プロパティができるので
<Canvas>
<WrapPanel x:Name="MyContent"
Width="{Binding ActualWidth,
RelativeSource={RelativeSource AncestorType={x:Type Canvas}}}">
</WrapPanel>
</Canvas>
Canvas
は、代わりにScrollContentPresenter
の使用されていますアニメ化される。
とメソッドコンテンツをスクロールするには、以下:
static void AnimateScroll(UIElement element, double amount, TimeSpan duration)
{
var sb = new Storyboard();
var position = Canvas.GetTop(element);
if(double.IsNaN(position)) position = 0;
var animation =
new DoubleAnimation
{
// fine-tune animation here
From = position,
To = position + amount,
Duration = new Duration(duration),
};
Storyboard.SetTarget(animation, element);
Storyboard.SetTargetProperty(animation, new PropertyPath(Canvas.TopProperty));
sb.Children.Add(animation);
sb.Begin();
}
メソッドの用法:
// scroll down 30 units animating for 100ms
AnimateScroll(MyContent, -30, new TimeSpan(0, 0, 0, 0, 100));
出典
2012-01-01 02:36:37
max
うわーマックス!どうもありがとうございます。私は新年のお祝いに出かける途中ですが、明日この最初のことを試してみたいと思っています。ありがとうございました! –
ビューティマックス!! 2番目のアプローチが最高でした。乾杯! –
2番目のアプローチは、WPF用のjQueryのslideUpおよびslideDownに似たメソッドを開発するための正しい方法で私を送りました。'TopProperty'を' HeightProperty'に変更し、アニメーションの 'From'と' To'値に変更するだけでした。ありがとう。 – Dinei