我听说过菲尔和你的权利。我正在替换数字上下。
我只是想通,有可能是一个可行的选择,因为这特定的控制最初并不是框架的一部分。我也有很多工作,并且非常喜欢结果,以及它采用主题的方式。
由于此应用程序的核心将成为未来应用的一个起点,我希望包括此功能,并准备为它做一些工作。
我最终做的是有点复杂,它是值得的,但用一个有用的帮助函数很容易。我需要为我的目标类型搜索“可视化树”。从那里我能够获得足够的功能来完成。
第一: 使用一个辅助功能,我发现here(感谢布鲁诺),我能够加入到我的Loaded事件:
private Double currentVerticalOffset;
private void Page_Loaded_1(object sender, RoutedEventArgs e)
{
ScrollViewer sv = Helpers.ViewHelpers.ListBoxHelper.FindVisualChild<ScrollViewer>(listbox);
sv.ScrollChanged += HandleRankScrollChange;
currentVerticalOffset = sv.VerticalOffset;
}
然后,我处理滚动更改事件:
private void HandleRankScrollChange(object sender, ScrollChangedEventArgs e)
{
ScrollViewer sv = Helpers.ViewHelpers.ListBoxHelper.FindVisualChild<ScrollViewer>(listbox);
if (sv.VerticalOffset > currentVerticalOffset)
{
Helpers.ViewHelpers.ListBoxHelper.SelectNextItem(listbox);
}
if (sv.VerticalOffset < currentVerticalOffset)
{
Helpers.ViewHelpers.ListBoxHelper.SelectPreviousItem(listbox);
}
currentVerticalOffset = sv.VerticalOffset;
}
我在这里所称的助手非常简单,但同样,这将成为基础工具包,因此拥有这些方法可能会再次派上用场。
public static void SelectNextItem(ListBox lb)
{
if (lb.SelectedIndex < lb.Items.Count)
{
lb.SelectedIndex++;
}
}
public static void SelectPreviousItem(ListBox lb)
{
if (lb.SelectedIndex > 0)
{
lb.SelectedIndex--;
}
}
布鲁诺的辅助函数再次
public static childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is childItem)
{
return (childItem)child;
}
else
{
childItem childOfChild = FindVisualChild<childItem>(child);
if (childOfChild != null)
{
return childOfChild;
}
}
}
return null;
}
感谢。
这听起来像你真正想要的是一个带有上一个和下一个按钮的文本框。 – Jesse 2013-04-06 16:40:01
感谢您的建议,但:我也发现一篇文章描述了类似的东西,但使用了一个listview。但是,我不愿意在这时换掉控件,因为我真的认为应该可以在我目前使用的控件上的某个地方使用该控件。 – Stickman 2013-04-06 16:43:27
听起来像你想要一个数字上下控制。扩展wpf工具包中的控件是否有用? – Phil 2013-04-06 17:23:10