我将一个附加行为添加到一个滑块,这会导致它在拇指被拖拽并保持在特定区域上时滚动某些内容。 (不能用一个简单的IsMouseOver触发作为滑块具有MouseCapture。)附加行为绑定到控件模板中的元素
行为有3个属性:
#region IsScrollHoverProperty
public static readonly DependencyProperty IsScrollHoverProperty = DependencyProperty.RegisterAttached(
"IsScrollHover",
typeof(Boolean),
typeof(ScrollHoverAreaBehaviour),
new UIPropertyMetadata(false));
#endregion
#region ScrollLeftRectProperty
public static readonly DependencyProperty ScrollLeftRectProperty = DependencyProperty.RegisterAttached(
"ScrollLeftRect",
typeof(Rectangle),
typeof(ScrollHoverAreaBehaviour),
new UIPropertyMetadata(null));
#endregion
#region ScrollRightRectProperty
public static readonly DependencyProperty ScrollRightRectProperty = DependencyProperty.RegisterAttached(
"ScrollRightRect",
typeof(Rectangle),
typeof(ScrollHoverAreaBehaviour),
new UIPropertyMetadata(null));
#endregion
当用户拖动滑块的IsScrollHoverProperty被设置为真,这是全部在Slider的ControlTemplates.Triggers中完成,并能正常工作。
当其设置为true时,回调会将PreviewMouseEnterHandlers挂接到两个矩形中,以检测鼠标何时进入它们。
矩形的问题在滑块控件模板正是如此也被定义为:
<StackPanel Grid.Row="0" Grid.RowSpan="3" HorizontalAlignment="Left" Orientation="Horizontal">
<Rectangle Width="40" Fill="#AAAAAAAA" Name="ScrollLeftRect"/>
</StackPanel>
<StackPanel Grid.Row="0" Grid.RowSpan="3" HorizontalAlignment="Right" Orientation="Horizontal">
<Rectangle Width="40" Fill="#AAAAAAAA" Name="ScrollRightRect"/>
</StackPanel>
我的问题是结合这些矩形所附ScrollRightRect和ScrollLeftRect属性。我已经尝试了一些东西,并怀疑我做了一个愚蠢的绑定错误或试图做一些不允许的事情。我目前正在结合他们在controltemplate.triggers如下:
<Trigger Property="local:ScrollHoverAreaBehaviour.IsScrollHover" Value="False">
<Setter Property="local:ScrollHoverAreaBehaviour.ScrollLeftRect" Value="{Binding ElementName=ScrollLeftRect}"/>
<Setter Property="local:ScrollHoverAreaBehaviour.ScrollRightRect" Value="{Binding ElementName=ScrollRightRect}"/>
<Setter TargetName="ScrollLeftRect" Property="Fill" Value="Red"/>
<Setter TargetName="ScrollRightRect" Property="Fill" Value="Red"/>
</Trigger>
我知道这个触发器被绊倒为矩形填充红色预期。 任何人都可以从这些片段中发现我做错了什么吗?
在此先感谢。
罗布
做你ScrollLeftRect/ScrollRightRect永远不会设置? OutputWindow中是否存在绑定错误? – CodeNaked 2011-04-02 22:37:42
使用断点时,它们始终显示为默认值。我得到了follwing绑定错误:System.Windows.Data错误:4:找不到与引用'ElementName = ScrollRightRect'绑定的源。 BindingExpression :(无路径);的DataItem = NULL;目标元素是'滑块'(Name ='MainSlider');目标属性是'ScrollRightRect'(键入'Rectangle')。我相信这是一个直截了当的错误。但我一直在考虑这个问题,只是无法发现它。 – rjw 2011-04-03 01:24:36