4

基本的に追加のつまみを備えたスライダー コントロールである範囲コントロールを作成しようとしています。既にビルドされているもので見つけた唯一のコードはここにあります。

http://www.codeplex.com/AvalonControlsLib

私の人生では、移動中にツールチップを各親指の上に (現在の値で) 表示することはできません。短いマウス ホバー ツールチップが表示されますが、親指を動かすと消えます。この特定のコントロールについて何か知っている人はいますか、またはスライダー コントロールに 2 つ目の親指を追加して同じように使用する方法を知っていますか? 上記のリンクを指す以外に答えのないいくつかのフォーラムで、この基本的な質問を見つけました。もちろん、人々はいつも、あなたがどのようにそれを行うかを示したり説明したりせずに、それがいかに簡単であるかについて言及します. 前もって感謝します。

ボブ

4

2 に答える 2

4

私はあなたがここからアバロンコントロールを使おうとしていると仮定しています:アバロンコントロール

コントロールテンプレートのつまみにツールチップを追加し、PART_LeftToolTipと呼びました。

<ControlTemplate TargetType="{x:Type Controls:RangeSlider}">
    <StackPanel Orientation="Horizontal" Name="PART_RangeSliderContainer">
         <RepeatButton Name="PART_LeftEdge"/>                        
         <Thumb Name="PART_LeftThumb" Cursor="SizeWE">
               <Thumb.ToolTip>
                     <ToolTip Name="PART_LeftToolTip" />        
               </Thumb.ToolTip>
          </Thumb>                                             
          <Thumb Name="PART_MiddleThumb" Cursor="ScrollWE" MinWidth="1"/>
          <Thumb Name="PART_RightThumb" Cursor="SizeWE">
                <Thumb.ToolTip>
                      <ToolTip Name="PART_RightToolTip" />
                </Thumb.ToolTip>
          </Thumb>
          <RepeatButton Name="PART_RightEdge"/>
      </StackPanel>
</ControlTemplate>

それらをテンプレートパーツとしてRangeSliderコントロールに追加しました

TemplatePart(Name = "PART_LeftToolTip", Type = typeof(ToolTip)),
TemplatePart(Name = "PART_RightToolTip", Type = typeof(ToolTip))]
public sealed class RangeSlider : Control

OnApplyTemplateメソッドで、次のことを行いました

_leftPreviewToolTip = EnforceInstance<ToolTip>("PART_LeftToolTip");
_rightPreviewToolTip = EnforceInstance<ToolTip>("PART_RightToolTip");

InitializeVisualElementsメソッド内に、以下を追加しました

private void InitializeVisualElementsContainer()
{
   // ** same as before ** //

   _leftPreviewToolTip.PlacementTarget = _leftThumb;
   _rightPreviewToolTip.PlacementTarget = _rightThumb;
}

ここで、楽しい部分については、基本的に、親指を動かしたときにこのツールチップを表示します。左のツールチップでは、左手の親指を動かしたとき、または中央の親指を動かしたときに表示する必要があります。ShowLeftTooltipというメソッドを作成し、LeftThumbDragDeltaとCenterThumbDragDeltaからそれぞれ呼び出しました。

private void ShowLeftToolTip()
{
    _leftPreviewToolTip.IsOpen = AutoToolTip;
    // This is a little trick to cause the ToolTip to update its position next to the Thumb
    _leftPreviewToolTip.HorizontalOffset = _leftPreviewToolTip.HorizontalOffset == 0.0 ? 0.001 : 0.0;
}

ツールチップを移動するためのそのヒントは、私が考えたものではありません。どこかの別の投稿から入手しました。

適切なツールチップを実装するための演習として、読者に任せます。

ツールチップのスタイルを設定して、柔軟な表示を可能にすることができます。空白にならないように、ツールチップにデータコンテキストとして何かを与えることを忘れないでください。

于 2010-06-24T16:04:07.893 に答える
0

IsOpenのプロパティをのプロパティにToolTipバインドIsDraggingできますThumb

于 2009-07-10T01:06:44.317 に答える