Diskuze: WPF: Akce po nastavení pozice ScrollVieweru

C# .NET .NET (C# a Visual Basic) WPF: Akce po nastavení pozice ScrollVieweru American English version English version

Avatar
jan.pichl
Člen
Avatar
jan.pichl:

Ahoj,

mám metodu

/// <summary>
       /// Causes the item to scroll into view.
       /// </summary>
       /// <param name="itemIndex">Index of the item.</param>
       /// <param name="afterScrollAction">An action that will be called after scrolling item into view.</param>
       public void ScrollIntoView(int itemIndex, Action<FrameworkElement> afterScrollAction)
       {
           var items = _children.GetItems();

           if (items == null || itemIndex < 0 || itemIndex >= items.Count)
           {
               return;
           }

           var element = _children.GetElement(itemIndex);
           if (element != null && System.Windows.Media.VisualTreeHelper.GetParent(element) == this)
           {
               // Child already created, just ensure its visibility
               ((IScrollInfo)this).MakeVisible(element, new Rect(0, 0, element.ActualWidth, element.ActualHeight));
               if (afterScrollAction != null)
               {
                   afterScrollAction(element);
               }
           }
           else
           {
               // Scroll to specified item
               SetFirstVisibleItem(itemIndex, 0);
               InvalidateMeasure();

               if (afterScrollAction != null)
               {
                   // Item will be visible only after rearrangement, so use BeginInvoke to call the action.
                   Dispatcher.BeginInvoke(
                       (Action)(() =>
                       {
                           var newElement = _children.GetElement(itemIndex);
                           if (newElement != null)
                           {
                               afterScrollAction(newElement);
                           }
                       }),
                       DispatcherPriority.Loaded);
               }
           }
       }

kterou mohu nastavit ScrollViewer na zadanou pozici parametrem

int itemIndex

a zároven mohu předat parametr

Action<FrameworkElement> afterScrollAction

. Kterým by se mělo podle mého soudu neco učinit až se tak stane. Bohužel nevím jak ho použít.

Představuji si si to tak že na položce

newElement

Provedu například změnu Background a Foreground.

Budu vděčný za jakoukoliv radu.

Predem děkuji za případnou pomoc.

Editováno 23.3.2015 22:17
 
Odpovědět 23.3.2015 22:16
Avatar
jiri.vytasil
Člen
Avatar
jiri.vytasil:

Ahoj,

pokud jsem dotaz pochopil spravne, tak se ptas na to, jak nastavit Background?
Jestli jo, tak by to melo byt takto:

ScrollIntoView(index, newElement =>
{
    newElement.Background = Colors.Blue;
    newElement.ForeGround = Colors.Red;
}

Jen v { } budes muset newElement pretypovat na neco, co Background a Foreground obsahuje.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 28.3.2015 17:35
Avatar
jan.pichl
Člen
Avatar
Odpovídá na jiri.vytasil
jan.pichl:

Nakonec jsem použil následující řešení s delegátem na metodu to je to co mě mátlo nemám je zažitý :), díky za odpověď určitě vyzkouším.

Action<FrameworkElement> DelegatPoScroll;

               DelegatPoScroll = s => ScrolovaniDokonceno(s);

               panel.ScrollIntoView((int)poradiVListu, DelegatPoScroll);

 private static void ScrolovaniDokonceno(FrameworkElement message)
        {
}
 
Nahoru Odpovědět 28.3.2015 20:38
Avatar
jiri.vytasil
Člen
Avatar
Odpovídá na jan.pichl
jiri.vytasil:

V tomto prikladu to muzes pouzit i primo:

panel.ScrollIntoView((int)poradiVListu, ScrolovaniDokonceno)

A pokud to nemas zazity, doporucuji si precist neco o lambda vyrazech, delegatech a anonymnich metodach.

 
Nahoru Odpovědět 28.3.2015 20:45
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.