Jar*_*red 23 wpf treeview scroll
当我在树视图中展开项目以便滚动时,会出现滚动条.但是,它不会向下滚动新扩展的项目分支 - 它们会被控件的底部裁剪掉.因此,当我继续在树的底部扩展项目时,我必须手动向下滚动以查看新的子项.有人建议如何让它自动滚动显示新扩展的项目?
ito*_*son 18
在TreeView上,处理TreeViewItem.Expanded事件(由于事件冒泡,您可以在TreeView级别执行此操作).在Expanded处理程序中,在引发事件的TreeViewItem上调用BringIntoView.
您可能需要一些试验和错误来获取事件处理程序代码中的TreeViewItem.我认为(尚未检查)您的Expanded事件处理程序的sender参数将是TreeView(因为那是附加事件处理程序的地方)而不是TreeViewItem.e.Source或e.OriginalSource可能是TreeViewItem数据模板中的一个元素.因此,您可能需要使用VisualTreeHelper来查看可视树以查找TreeViewItem.但是如果你使用调试器检查发送者和RoutedEventArgs,这应该是微不足道的.
(如果你能够使它工作并想要捆绑它,这样你就不必将相同的事件处理程序附加到每个TreeView,应该很容易将它封装为附加行为,这将允许你应用它以声明的方式,包括通过风格.)
小智 17
您可以使用TreeViewItem样式中的简单EventSetter在选择项目时调用事件处理程序.然后为该项目调用BringIntoView.
<TreeView >
 <TreeView.ItemContainerStyle>
   <Style TargetType="{x:Type TreeViewItem}">
     <EventSetter Event="Selected" Handler="TreeViewSelectedItemChanged" />
   </Style>
 </TreeView.ItemContainerStyle>
</TreeView>
private void TreeViewSelectedItemChanged(object sender, RoutedEventArgs e)
{
    TreeViewItem item = sender as TreeViewItem;
    if (item != null)
    {
        item.BringIntoView();
        e.Handled = true;  
    }
}
小智 15
在IsSelected触发器上使用依赖项属性:
<Style TargetType="{x:Type TreeViewItem}">
 <Style.Triggers>
  <Trigger Property="IsSelected" Value="True">
    <Setter Property="commands:TreeViewItemBehavior.BringIntoViewWhenSelected" Value="True" />
  </Trigger>
</Style.Triggers>
这是依赖属性的代码:
public static bool GetBringIntoViewWhenSelected(TreeViewItem treeViewItem)
{
  return (bool)treeViewItem.GetValue(BringIntoViewWhenSelectedProperty);
}
public static void SetBringIntoViewWhenSelected(TreeViewItem treeViewItem, bool value)
{
  treeViewItem.SetValue(BringIntoViewWhenSelectedProperty, value);
}
public static readonly DependencyProperty BringIntoViewWhenSelectedProperty =
    DependencyProperty.RegisterAttached("BringIntoViewWhenSelected", typeof(bool),
    typeof(TreeViewItemBehavior), new UIPropertyMetadata(false, OnBringIntoViewWhenSelectedChanged));
static void OnBringIntoViewWhenSelectedChanged(DependencyObject depObj, DependencyPropertyChangedEventArgs e)
{
  TreeViewItem item = depObj as TreeViewItem;
  if (item == null)
    return;
  if (e.NewValue is bool == false)
    return;
  if ((bool)e.NewValue)
    item.BringIntoView();
}
| 归档时间: | 
 | 
| 查看次数: | 21918 次 | 
| 最近记录: |