Thumb
コントロールのVisualTree
ルートとしてCanvas
にユーザーコントロールを動的に配置しました。サムコントロールを正しく移動することはできますが、ユーザーコントロールで定義されている東、南東、南の四角形からサイズを変更しながら、コントロールのサイズを正しく変更できるだけです。 DragDelta
方法でWPFのキャンバスでのThumbテンプレートコントロールのサイズ変更
//Instantiate a new Thumb control to be placed on the canvas.
var myThumb = new Thumb();
myThumb.Name = "myThumb";
//Instantiate a new ThumbTemplate and ElementFactory with my user control.
var myThumbTemplate = new ControlTemplate(typeof(Thumb));
myThumbTemplate.VisualTree = new FrameworkElementFactory(typeof(MyUserControl), "myUserControl");
//Set the thumb template to the newly instantiated template.
myThumb.Template = myThumbTemplate;
//Point the DragDelta and DragCompleted events to local methods.
myThumb.DragDelta += new DragDeltaEventHandler(myThumb_DragDelta);
myThumb.DragCompleted += new DragCompletedEventHandler(myThumb_DragCompleted);
//Add the thumb to the canvas control.
this.myCanvas.Children.Add(myThumb);
Canvas.SetZIndex(myThumb, 1);
Canvas.SetTop(myThumb, 75);
Canvas.SetLeft(myThumb, 50);
、このアプローチは、長方形のサイズを変更する東からユーザーコントロールのサイズを変更するために動作します:
var myThumb = sender as Thumb;
if (myThumb != null)
{
var myUserControl = myThumb.Template.FindName("myUserControl", myThumb) as MyUserControl;
if (myUserControl != null)
{
myUserControl.Width = myUserControl.OldWidth + e.HorizontalChange;
}
}
しかし、私はそれを行うプラスThumb
コントロール(IEのCanvas.Top
を設定しようとするところはどこでも私は期待した結果を得ることができません:
double top = Canvas.GetTop(finderThumb) + e.VerticalChange;
myUserControl.Height = myUserControl.OldHeight - e.VerticalChange;
Canvas.SetTop(myThumb, top);
何が起こるかはcontr olはキャンバスコントロールで上下に動きますが、縦または横の変化にかかわらず、1ピクセルだけサイズを変更します。なぜこのようなことが起こるのか、問題を解決するための提案はありますか?ありがとう!
この例で説明されている、このクラス(ResizeThumb)を使用してみてくださいこの場合、VerticalChangeを減算することによって正しい動作が得られます。つまり、コントロールの上部(北)の境界線を選択してドラッグすると、コントロールの高さが高くなりますが、ドラッグするとコントロールの高さが低くなります。問題は、コントロールのN境界線がマウスに残っていないことです。 でも、符号を切り替えるだけでは問題は解決されません。つまり、VerticalChangeの値にもかかわらず、コントロールが1ピクセルだけサイズを変更します。 –