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);
};
}
};
}

浙公网安备 33010602011771号