मैंने कुछ ऐसा किया है और ऐसा करने का सबसे अच्छा तरीका यह है कि आपकी सामग्री को स्क्रॉल व्यूअर में रखना था और केवल स्क्रॉलबार बंद करना था। फिर scrollviewer स्क्रॉल करने के लिए अपने बटन कोड।
संपादित करें: आकार बदलने से निपटने के किसी भी तरीके के बारे में टिप्पणी करने का उत्तर देना।
सबसे पहले, आप इस नियंत्रण को ContentControl के रूप में बनाएंगे। इसमें जेनेरिक.एक्सएएमएल में परिभाषित टेम्पलेट होना चाहिए जिसमें आपके बटन नियंत्रण और स्क्रॉल व्यूअर हैं। कुछ की तरह: आप के लिए (1) दर्शक स्क्रॉल और (2) नई जाँच की आवश्यकता होगी
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
left = GetTemplateChild("left") as Button;
left.Click += new RoutedEvent(YourHandler);
right = GetTemplateChild("right") as Button;
right.Click += new RoutedEvent(YourHandler);
// position your scroll buttons here, not writing that code
scroll = GetTemplateChild("viewer") as ScrollViewer;
root = GetTemplateChild("root") as Canvas;
var fe = this.Content as FrameworkElement;
if (fe != null)
{
fe.SizeChanged += new SizeChangedEventHandler(fe_SizeChanged);
}
}
void fe_SizeChanged(object sender, SizeChangedEventArgs e)
{
this.InvalidateMeasure();
}
protected override Size ArrangeOverride(Size finalSize)
{
if (!double.IsInfinity(scroll.ViewportHeight))
{
left.Visibility = (scroll.HorizontalOffset > 0);
right.Visibility = (scroll.HorizontalOffset < ScrollableHeight);
}
return base.ArrangeOverride(finalSize);
}
protected override Size MeasureOverride(Size availableSize)
{
scroll.Measure(availableSize);
return scroll.DesiredSize;
}
अपने बटन क्लिक संचालकों में:
<Canvas x:Name="root">
<Button x:Name="left" Content="<"/>
<Button x:Name="right" Content=">"/>
<ScrollViewer x:Name="viewer" BorderThickness="0" VerticalScrollBarVisibility="Hidden">
<ContentPresenter />
</ScrollViewer>
</Canvas>
फिर अपने नियंत्रण में OnApplyTemplate ओवरराइड करने के लिए की आवश्यकता होगी क्षैतिज ऑफसेट का मूल्य यह देखने के लिए कि क्या आपको बटन को छिपाने या दिखाने की आवश्यकता है या नहीं।
अस्वीकरण: यह कोड संभवतः काम नहीं करता है क्योंकि यह हाथ से लिखा गया था और एक अलग उदाहरण के आधार पर।
कि विधि के साथ समस्या यह है कि मैं नहीं दिख रहा है एक घटना मैं संलग्न कर सकता है , जो मुझे सूचित करेगा जब व्यूपोर्ट इस तरह से बदल गया है कि बटन को दृश्यमान करने की आवश्यकता है। तो असल में, मुझे बटन हमेशा दिखाना होगा, जो मुझे पसंद नहीं है। – Nick