つまみをドラッグして特定の領域に保持すると、一部のコンテンツをスクロールさせる動作をスライダーに追加しています。(Slider Thumb には MouseCapture があるため、単純な IsMouseOver トリガーは使用できません。)
動作には 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 が true に設定されます。これはすべて Slider の ControlTemplates.Triggers で行われ、正しく機能します。
true に設定すると、コールバックは PreviewMouseEnterHandlers を 2 つの Rectangles にフックして、マウスがそれらに入ったときを検出します。
問題の Rectangles は、Slider の controltemplate でも次のように定義されています。
<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>
私が抱えている問題は、これらの Rectangles を添付の 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>
長方形が予想どおり赤で塗りつぶされているため、このトリガーが作動していることがわかります。これらのスニペットから私が間違っていることを誰でも見つけることができますか?
前もって感謝します。
ロブ