2011-12-11 21 views
6

, İçinde 7 farklı groupboxes bir ScrollViewer sahiptir. Her grup kutusu, farklı formlar için kendi bireysel bölümdür. Scrollviewer çok uzun olduğu için, panelin sol tarafındaki bir yığın panele bir dizi düğme yerleştirdim ve bir düğmeyi tıklattığınızda ilgili grup için BringIntoView yöntemini tetikleyecek şekilde kod arkası yaptım.BringIntoView Yöntem WPF

Sorum şu, görünür bölümün her zaman en üstünde GroupBox konumlandırmak için BringIntoView zorlamak için herhangi bir yolu yoktur. Varsayılan olarak, BringIntoView, yalnızca görüntüleyicinin tamamı görüntülenene kadar scrollviewer'ı hareket ettirir, böylece en üstteki öğe görüntülenir. Bunun etrafında bir yolu var mı?

ScrollToVerticalOffset'i kullanmayı düşündüm, ancak doğru konumu nasıl elde edeceğimi anlayamadım, çünkü bu grup kutusunun konumu almak için kullanacağım konumu bulunmadığını söylüyorum çünkü ScrollToVerticalOffset ile ayarlayın . Bunu yazarken düşündüğüm bir şey ilk önce her grup-basın jusmp'unun en üstteki grup kutusuna sahip olmasıydı, o zaman hemen doğru olana doğru devam ediyordu, ama bu bir çeşit hack-ish gibi görünüyor ve ben de doğru yolu bulmayı tercih ediyorum. :)

+1

tavsiye Sadece bir kelime, nasıl biraz daha az kod ve daha küçük daha sindirilebilir paragraflar halinde bu ilk paragrafı Ayrılma konusunda. Aksi halde sadece bir metin duvarı ve çok fazla dikkat çekmeyecek ve insanları kapatacak bir kod duvarımız var. http://msmvps.com/blogs/jon_skeet/archive/2010/08/29/writing-the-perfect-question.aspx – Kev

+0

1 için: Burada mükemmel bir soru sormak için nasıl Jon Skeets mükemmel yazının bir okuma var Soruyu düzenleme ve geliştirme – SvenG

cevap

9

bu bir deneyin:

private void ScrollToGroupBox(GroupBox groupBox) 
{ 
    GeneralTransform groupBoxTransform = groupBox.TransformToAncestor(scrollViewer); 
    Rect rectangle = groupBoxTransform.TransformBounds(new Rect(new Point(0, 0), groupBox.RenderSize)); 
    scrollViewer.ScrollToVerticalOffset(rectangle.Top + scrollViewer.VerticalOffset); 
} 

kodu ScrollViewer içindeki GroupBox ve ona verilirse pozisyonunu alır.

+1

İşleri harika! Şimdi tek sorunum, son GroupBox'ın odadan çıkmadan önce en üst seviyeye ulaşmasına izin vermek için altta yeterli alan bırakıyor. Bunu, son GroupBox'ın altına bir kenar boşluğu ekleyerek yaptım, ama daha iyi bir şekilde biliyorsanız, bunu duymayı çok isterim. Nasıl sahip olduğumu çalışır, ancak pencereyi daha uzun olacak şekilde yeniden boyutlandırırsam tam olarak ulaşılamaz. –

+1

Sevindim Yardımcı olabilirim. Daha iyi bir yol bilmiyorum ama bir Kenar Boşluğu ekleyerek veya grup uzunluğu yüksekliğini scrollviewer ile aynı değere ayarlıyorum. Sen xaml kodunu izleyerek ScrollViewer son grup kutusunda yüksekliğini bağlanarak yapabilirsiniz: SvenG