C# WPF中的滑块渲染问题

C# WPF中的滑块渲染问题,c#,wpf,scroll,rendering,C#,Wpf,Scroll,Rendering,我有一个WPF应用程序,我需要画一个大滑块。问题在于,大型滑块存在严重的性能问题。我所做的是缩小滑块的大小,并在需要时重新绘制它。也就是说,当滚动Scrollviewer并且滑块超出范围时,我将滑块放置在正确的位置,并设置其最小值和最大值 它工作得很好,直到我想到达靠近拇指的末端,它在不同的位置渲染,并从不同的位置进行交互,因为有很大的区域可以滚动 正如您在图片中看到的,我需要将鼠标放在红色区域来拖动拇指,但拇指是在不同的位置绘制的 如果你们中的任何人有解决这个问题的办法,并且知道原因,这将是

我有一个WPF应用程序,我需要画一个大滑块。问题在于,大型滑块存在严重的性能问题。我所做的是缩小滑块的大小,并在需要时重新绘制它。也就是说,当滚动
Scrollviewer
并且滑块超出范围时,我将滑块放置在正确的位置,并设置其最小值和最大值

它工作得很好,直到我想到达靠近拇指的末端,它在不同的位置渲染,并从不同的位置进行交互,因为有很大的区域可以滚动

正如您在图片中看到的,我需要将鼠标放在红色区域来拖动拇指,但拇指是在不同的位置绘制的

如果你们中的任何人有解决这个问题的办法,并且知道原因,这将是一个很大的帮助

下面给出了示例代码

提前谢谢


将滚动条移到末端,然后尝试拖动拇指以复制滚动条 问题

main window.xaml

<Window x:Class="SLiderTestApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Width="525"
        Height="350"
        Loaded="MainWindow_OnLoaded">
    <ScrollViewer x:Name="scrollViewer"
                  HorizontalScrollBarVisibility="Visible"
                  ScrollChanged="ScrollViewer_OnScrollChanged">
        <Canvas x:Name="canvas" Width="600000000">
            <Grid x:Name="_grid" Width="10000">
                <Slider x:Name="slider" />
            </Grid>
        </Canvas>

    </ScrollViewer>

</Window>

MainWindow.cs

namespace SLiderTestApplication
{
    #region

    using System.Windows;
    using System.Windows.Controls;

    #endregion


    public partial class MainWindow : Window
    {
        #region Constructors and Destructors

        public MainWindow()
        {
            this.InitializeComponent();
        }

        #endregion

        #region Methods

        private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
        {
            this.slider.Maximum = 10000;
            this.slider.Value = this.slider.Maximum;
        }

        private void ScrollViewer_OnScrollChanged(object sender, ScrollChangedEventArgs e)
        {
            var left = this.scrollViewer.HorizontalOffset - this.slider.ActualWidth + 200;

            if (left < 0)
            {
                left = 0;
            }

            this._grid.Margin = new Thickness(left, 0, 0, 0);
        }

        #endregion
    }
}
名称空间滑块应用程序
{
#区域
使用System.Windows;
使用System.Windows.Controls;
#端区
公共部分类主窗口:窗口
{
#区域构造函数和析构函数
公共主窗口()
{
this.InitializeComponent();
}
#端区
#区域方法
私有void主窗口\u已加载(对象发送方,路由目标)
{
this.slider.max=10000;
this.slider.Value=this.slider.max;
}
私有void ScrollViewer_OnScrollChanged(对象发送方,ScrollChangedEventArgs e)
{
var left=this.scrollViewer.HorizontalOffset-this.slider.ActualWidth+200;
if(左<0)
{
左=0;
}
此._grid.Margin=新厚度(左,0,0,0);
}
#端区
}
}

不确定问题是什么,不清楚如何准确地重现问题。另外,我希望它不会涉及缺少的处理程序
Slider\u OnPreviewMouseUp
Slider\u OnValueChanged
。将滚动移动到末尾,然后尝试拖动拇指来重现问题。很抱歉,缺少处理程序,可以删除它们阅读注释@KingKing已告知您,我们无法从您提供的代码中重现问题,并指出您引用的PreviewMouseUp上的
滑块_
滑块_ _(值已更改
处理程序缺失。如果我们不能重现你的问题,那么我们就帮不了你。请阅读Stack Overflow Help Center的页面,了解有关提供代码示例以演示问题的更多信息。我能够重现错误的拇指放置问题。但我仍然想知道你想做什么?你已经从技术上向我们展示了你在做什么,但你想做什么?我们不明白为什么在更大的画布上有一个巨大的滚动条。滑块应该做什么?为什么画布这么大?如果需要的话,为什么不让滑块适合窗口(不在画布中)并使其单位缩放到更大的对象?