Avalonia使用代码更改滑动条的颜色

由于使用Style更改滑动条样式没生效,遂通过c#代码通过逻辑树获取元素的方式来进行样式修改,以此博客记录。注意点就是目标元素的生成和渲染时间。

AttachedToVisualTree事件在控件​​被添加到视觉树时触发​​,然而,对于ScrollViewer这类复杂控件,其内部结构(即控件模板)的构建是​​异步的​​。当MyDeviceDetailView的AttachedToVisualTree触发时,ScrollViewer自身的模板可能还未实例化,其内部的PART_Frame自然还不存在。

  public MyDeviceDetailView()
    {
        InitializeComponent();
       
        AttachedToVisualTree += (sender, e) =>
        {
            var scrollViewer = this.FindControl<ScrollViewer>("Viewer");
            if (scrollViewer != null)
            {
                // 监听ScrollViewer自身的附加事件
                scrollViewer.AttachedToVisualTree += (s, e) =>
                {
                    Dispatcher.UIThread.Post(() =>
                    {
                        // 在此处查找PART_Frame
                        var targetBorder = scrollViewer.GetVisualDescendants()
                            .OfType<Border>()
                            .FirstOrDefault(x => x.Name == "PART_Frame");
                        if (targetBorder != null)
                        {
                            targetBorder.Background = new SolidColorBrush(Color.Parse("#eb5a10"));
                        }
                    }, DispatcherPriority.Loaded);
                };
            }
        };
    }
posted @ 2025-10-20 17:16  Timskt  阅读(7)  评论(0)    收藏  举报