Laden...

UIPropertyMetadata für ScrollViewer setzen

Erstellt von Runnable vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.130 Views
R
Runnable Themenstarter:in
96 Beiträge seit 2010
vor 13 Jahren
UIPropertyMetadata für ScrollViewer setzen

Hallo,

ich wollte ein einfaches Scrollen animieren,
jedoch verbietet das das zugehörige UIPropertyMetadata Object.

Die VerticalOffset-Eigenschaft ist nicht animierbar für die System.Windows.Controls.ScrollViewer-Klasse, da das IsAnimationProhibited-Flag für die "UIPropertyMetadata" festgelegt wurde, die zum Verknüpfen der Eigenschaft mit der Klasse verwendet werden.

Leider konnte ich keinen Weg finden, die Metadaten zu ändern...
Weiss da jmd weiter ?

greetz

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo Runnable,

kannst du ein wenig Beispielcode posten? Wir können dir ansonsten schlecht weiterhelfen.

zero_x

297 Beiträge seit 2008
vor 13 Jahren

Die Vertical- und HorizontalOffset-Eigenschaften des Scrollviewers sind keine DependencyProperties und können daher nicht animiert werden. Mit Hilfe eines selbstgebauten AttachedProperties sollte es aber funktionieren. Wie man das erstellt, findest du hier.

There are 10 kind of people, those who understand binary and those who don't.

R
Runnable Themenstarter:in
96 Beiträge seit 2010
vor 13 Jahren

Yeah Schlopp, so tut das gehen tun 😃

Aber so richtig verstanden habe ich das nicht;
ich meine klar, wenn man ganz bestimmte kompliziertere Animationen machen will, deren Interpolation etwas mehr code braucht ist der Aufwand ja gerechtfertigt.

Aber so wird ja nur an ScrollViewer#ScrollToVerticalOffset delegiert.

Warum verbietet also .NET erstmal per se die Animation von scrolling; ich meine das ist doch nicht unüblich gerade auf so touch devices.

der Code, der funktioniert :

private void ScrollDown() {
            DoubleAnimation a = new DoubleAnimation();
            a.From = scrollViewer.VerticalOffset;
            a.To = scrollViewer.VerticalOffset + ActualHeight/2;
            scrollViewer.BeginAnimation(ScrollViewerUtilities.VerticalOffsetProperty, a);
}

public class ScrollViewerUtilities { 
        public static readonly DependencyProperty VerticalOffsetProperty = DependencyProperty.RegisterAttached(
                                                                            "VerticalOffset", typeof(double), typeof(ScrollViewerUtilities),
                                                                            new FrameworkPropertyMetadata((double)0.0, new PropertyChangedCallback(OnVerticalOffsetChanged)));

        private static void OnVerticalOffsetChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
           ScrollViewer viewer = (ScrollViewer)d;
           viewer.ScrollToVerticalOffset((double)e.NewValue);
        }
    }
6.862 Beiträge seit 2003
vor 13 Jahren

Hallo,

du veränderst ja durch die Animation ja ein bestehendes Scrollingverhalten. Das ist schon problematisch weils mindestens zwei verschiedene Scrollingverhalten gibt in WPF - einmal Pixelbasiert und einmal Elementbasiert. Beim Elementbasierten macht ändern des Offsets keinen Sinn. Eigenes Scrolling würde man aber eh nicht durch verändern des Offsets machen, sondern durch implementieren von IScrollInfo.

Baka wa shinanakya naoranai.

Mein XING Profil.