gpt4 book ai didi

silverlight - 在 Silverlight 中选择项目时,无法阻止基类中 TreeView 的自动水平滚动

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

我试图阻止在 Silverlight 中选择 TreeView 项目时自动水平滚动。我正在尝试在基类中执行此操作。

到目前为止,我还无法管理它。我已经尝试了以下代码,但它会执行,然后当我选择它时它会滚动。

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

namespace MyControls
{
public class CustomTreeView : TreeView
{
private ScrollViewer _scrollViewer;

protected override void OnSelectedItemChanged(RoutedPropertyChangedEventArgs<object> e)
{
base.OnSelectedItemChanged(e);
_scrollViewer.ScrollToHorizontalOffset(0);
}

public override void OnApplyTemplate()
{
base.OnApplyTemplate();
_scrollViewer = GetTemplateChild("ScrollViewer") as ScrollViewer;
}
}
}

我实际上并不想完全禁用滚动——如果某个项目飞出 TreeView 的边缘,我希望用户能够滚动到它。我想做的是当我选择一个可能长于屏幕宽度的子节点时,将树保持在原处。

我已经在 WrapPanel 上尝试过 RequestBringIntoView,但它似乎仅适用于 WPF。我也试过在 UpdateLayout 和 SelectedItemChanged 上这样做。都无济于事。我似乎找不到可以让另一个类继承和使用的通用解决方案。

有人有什么想法吗?

谢谢!

-阿里

编辑:赏金声明我需要能够在 XAML 中完成它。那是我的错字。我也会采用代码解决方案。谢谢!

最佳答案

导致 ScrollViewer 滚动的原因是每次 TreeView 的选择发生变化时,都会调用 ScrollIntoView(在 TreeView的源码),

this.ItemsControlHelper.ScrollIntoView(container.HeaderElement ?? container);

它基本上会尝试将标题或整个 TreeViewItem 滚动到最左边。我最初认为您可以修改 TreeViewTreeViewItem 样式,方法是删除所有左侧的 Margin 并使页眉与扩展按钮的左边距相同.但是,此解决方案仅适用于第一级项目和第二级项目,项目前有一个缩进,因此如果您单击它,它将再次滚动。

所以我猜没有纯 xaml 解决方案。解决此问题的最简单方法是,假设您已经获得了自定义控件,而不是调用(我认为存在时间问题,这就是此代码不起作用的原因)

_scrollViewer.ScrollToHorizontalOffset(0); 

你会

var scrollableRegions = _scrollViewer.GetVisualDescendants().OfType<IScrollInfo>();
foreach (var region in scrollableRegions)
{
region.SetHorizontalOffset(0);
}

如果您真的更喜欢 xaml 解决方案,您也可以将此代码放入行为或附加属性中,然后使用 Blend 将其放入。

说了这么多,另一个我个人认为更好并在我自己的应用程序中使用过的解决方案是,完全禁用水平滚动条,并为我所有的 使用 TextTrimming="WordEllipsis" >TextBlocks inside TreeViewItems 以指示用户还有更多文本。还提供 GridSplitter 以允许用户调整 TreeView 内容的大小以查看完整文本,而不是水平来回滚动。但这只是我的意见。

希望对您有所帮助! :)

关于silverlight - 在 Silverlight 中选择项目时,无法阻止基类中 TreeView 的自动水平滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7897133/

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