- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
每当在我的 TreeView 中选择一个节点时,它都会自动水平滚动到该项目。 I've found the way to disable this .如果我在后面的代码中使用此代码,它会完美运行:
<TreeView>
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<EventSetter Event="RequestBringIntoView" Handler="TreeViewItem_RequestBringIntoView"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
private void TreeViewItem_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
{
e.Handled = true;
}
<Window x:Class="TreeViewWpfApplication.MainWindow"
. . . . .
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:ei=http://schemas.microsoft.com/expression/2010/interactions>
<TreeView Grid.Column="1" Margin="5" Background="Green">
<i:Interaction.Triggers>
<i:EventTrigger EventName="RequestBringIntoView">
<ei:CallMethodAction MethodName="RequestBringIntoView_Handler" TargetObject="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<TreeView>
<TreeViewItem Header="---Level 1" >
<TreeViewItem Header="--- Level 2.1" >
<TreeViewItem Header="--- Level 3.1" >
</TreeViewItem>
</TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="Level 2.3" />
</TreeView>
</Window>
public void RequestBringIntoView_Handler(object sender, RequestBringIntoViewEventArgs e)
{
e.Handled = true;
}
最佳答案
我相信您总是可以循环浏览所有TreeViewItem
的TreeView
并克隆每个 TriggerBase
来自 Interaction.Triggers
附在TreeView
在将每个克隆的附加到 Interaction.Triggers
之前每个 TreeViewItem
.
我对微软感到非常失望,自从我开始学习如何编程以来,这个名字让我感到自豪,并且多年来一直是我无尽的灵感。但坦率地说,微软有很多事情让我们感到失望。您的代码实际上应该可以正常工作。为什么?我试过了,事件RequestBringIntoView
实际上从 TreeViewItem
冒出至TreeView
.事实上,当您在 TreeView
上添加事件处理程序时直接,你会看到事件处理程序被触发了。但是使用 Interaction
设置处理程序的非常等效的形式不能那样工作。这太可怕了。很明显,它旨在以 MVVM 方式设置事件处理程序,但它非常有限。
我不得不做一个变通方法,我们使用自定义附加属性来允许设置 Interaction.Triggers
很有型。但是我不得不说它不是很漂亮。您需要明确声明 Array
的 TriggerBase
(我以前做过类似的事情,但从未找到更好的解决方案)。接下来需要使用代理绑定(bind)TargetObject
对于 EventTrigger
(因为我们将触发器放在一个数组中,并且它与可视树分离)。
这是自定义附加属性的代码:
//add some using alias like this first
//using i = System.Windows.Interactivity;
public static class InteractionX
{
public static readonly DependencyProperty TriggersProperty
= DependencyProperty.RegisterAttached("Triggers", typeof(i.TriggerBase[]),
typeof(InteractionX), new PropertyMetadata(triggersChanged));
public static i.TriggerBase[] GetTriggers(DependencyObject o){
return o.GetValue(TriggersProperty) as i.TriggerBase[];
}
public static void SetTriggers(DependencyObject o, i.TriggerBase[] value)
{
o.SetValue(TriggersProperty, value);
}
static void triggersChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
var triggers = e.NewValue as i.TriggerBase[];
var currentTriggers = i.Interaction.GetTriggers(o);
currentTriggers.Clear();
foreach (var t in triggers)
{
t.Detach();
currentTriggers.Add(t);
}
}
}
<TreeView>
<TreeView.Resources>
<DiscreteObjectKeyFrame x:Key="proxy" Value="{Binding}"/>
</TreeView.Resources>
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="local:InteractionX.Triggers">
<Setter.Value>
<x:Array Type="{x:Type i:TriggerBase}">
<i:EventTrigger EventName="RequestBringIntoView">
<ei:CallMethodAction MethodName="bringIntoViewHandler"
TargetObject="{Binding Value, Source={StaticResource proxy}}"/>
</i:EventTrigger>
</x:Array>
</Setter.Value>
</Setter>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
Interaction.Triggers
设置在
TreeViewItem
可以处理冒泡
RequestBringIntoView
来自后代 TreeViewItems 但正如我所说,将其设置为
TreeView
很遗憾不起作用。
关于c# - 阻止 TreeView 中的自动水平滚动不起作用。 MVVM、XAML 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33235729/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!