gpt4 book ai didi

wpf - 如何将WPF ScrollViewer的内容滚动到特定位置

转载 作者:行者123 更新时间:2023-12-03 13:12:25 24 4
gpt4 key购买 nike

我正在编写自定义WPF ItemsControl以显示项目列表。这些项目显示为嵌入ScrollViewer内部:

<Style TargetType="MyCustomItemsControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="MyCustomItemsControl">
<ScrollViewer x:Name="PART_MyScrollViewer" >
<ItemsPresenter/>
</ScrollViewer>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

我想确保当我将鼠标移到控件中时,特定项目(标记为选中)将被滚动到鼠标位置。在我的OnMouseEnter方法中,我可以找到该项目,但是我不知道下一步该怎么做。有谁有想法吗?
protected override void OnMouseEnter(MouseEventArgs e)
{
for (int i = 0; i < Items.Count; i++)
{
ContentPresenter uiElement = (ContentPresenter)ItemContainerGenerator.ContainerFromIndex(i);
var item = uiElement.Content as MyCustomObject;
if (item.IsSelected)
{
// How to scroll the uiElement to the mouse position?
break;
}
}
}

最佳答案

类似于以下内容:

var sv = (ScrollViewer)Template.FindName("PART_MyScrollViewer", this); // If you do not already have a reference to it somewhere.
var ip = (ItemsPresenter)sv.Content;
var point = item.TranslatePoint(new Point() - (Vector)e.GetPosition(sv), ip);
sv.ScrollToVerticalOffset(point.Y + (item.ActualHeight / 2));

关于wpf - 如何将WPF ScrollViewer的内容滚动到特定位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6336441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com