IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Mezi 13:00 až cca 16:00 proběhne odstávka sítě z důvodu aktualizace. Web bude po celou dobu nedostupný.

Diskuze: WPF: Akce po nastavení pozice ScrollVieweru

Aktivity
Avatar
jan.pichl
Člen
Avatar
jan.pichl:23.3.2015 22:16

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:28.3.2015 17:35

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í
+2,50 Kč
Ř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:28.3.2015 20:38

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:28.3.2015 20:45

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.