wpf鼠标拖动控件问题

lllmaliyuan 2010-05-30 09:00:15
我让window的flowdirection-righttoleft(原来是lefttoright)
我在mousemove中btn.rendertransform=new translatetransform(currentpostition,0);
发现我鼠标往左边控件往右边移动。鼠标往右边控件往左边移动。原来lefttoright的时候是正常的。鼠标往左边控件往左边。鼠标往右他也往右。请问为什么啊。如何更改btn.rendertransform=new translatetransform(currentpostition,0);
谢谢
最后90分了。都给了
...全文
1439 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lllmaliyuan 2010-05-31
  • 打赏
  • 举报
回复
感激涕零。完全正确。谢谢万分
sunyfun 2010-05-30
  • 打赏
  • 举报
回复
之所以改为RightToLeft后方向反了,因为当前的客户端窗口的原点坐标已变为右上角
sunyfun 2010-05-30
  • 打赏
  • 举报
回复
刚才的move不行,改了一下就可以了
如下:
private void button1_PreviewMouseMove(object sender, MouseEventArgs e)
{
Point position = e.GetPosition(this);
moveXL = position.X - curPt.X;
if (this.button1.RenderTransform.GetType() == typeof(TranslateTransform) && bolMOve == true && e.LeftButton == MouseButtonState.Pressed)
{
TranslateTransform ttf = this.button1.RenderTransform as TranslateTransform;
if (this.FlowDirection == FlowDirection.LeftToRight)
ttf.X += moveXL;
else
ttf.X -= moveXL;
}
this.curPt = position;
}
sunyfun 2010-05-30
  • 打赏
  • 举报
回复
你不需每次都new 一个TranslateTransform,你只需添加一个只添加一个之后一直对这个的TranslateTransform.X做递加或者递减操作。这样就没问题了
bool bolMOve = false;
double moveXL = 0;
Point curPt;
private void button1_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
curPt = e.GetPosition(this);
bolMOve = true;
}

private void button1_PreviewMouseMove(object sender, MouseEventArgs e)
{
Point position = e.GetPosition(this);
moveXL = position.X - curPt.X;
if (this.button1.RenderTransform.GetType() == typeof(TranslateTransform) && bolMOve == true && e.LeftButton == MouseButtonState.Pressed)
{
TranslateTransform ttf = this.button1.RenderTransform as TranslateTransform;
ttf.X += moveXL;
}
this.curPt = position;
}
lllmaliyuan 2010-05-30
  • 打赏
  • 举报
回复
我将整个页面从左边到右边排列着段代码没有问题。我将页面从右边到左边排列。发现鼠标拖动的时候他移动的方向反了。
private void OnMouseMove(object sender, EventArgs e)
{
if (this.bMouseDown)
{
//当按下后也就是属于拖动的时候记录鼠标的位置
Point p = Mouse.GetPosition(this);
//shift等于当鼠标按下到鼠标拖动到当前位置的距离
shift = (p.X - this.pMousedown.X);
//当前的位置等于


this.currentPosition = this.position + shift;


if (this.currentPosition < 0)
this.currentPosition = 0;
//如果当前的位置大于btswitch的宽度那就赋值为他的宽度
if ((this.currentPosition) > this.btSwitch.Width)
this.currentPosition = this.btSwitch.Width;
this.btSwitch.RenderTransform = new TranslateTransform(this.currentPosition, 0);







}
}

private void OnMouseDown(object sender, EventArgs e)
{
//当按下的时候记录鼠标的位置
pMousedown = Mouse.GetPosition(this);
this.bMouseDown = true;
}
sunyfun 2010-05-30
  • 打赏
  • 举报
回复
用RenderTransform的话,是不是你计算错了,把一些代码贴出来
lllmaliyuan 2010-05-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ly302 的回复:]

wpf中鼠标拖动控件移动

XML code
xaml:

<Canvas Name="canvas2" >
<Canvas Background="Yellow" Canvas.Left="40" Canvas.Top="20" Width="100" Name="canvas1" Height="54" >
<Thumb Na……
[/Quote]
谢谢你。不过我不能改变布局的。
lllmaliyuan 2010-05-30
  • 打赏
  • 举报
回复
恩。对啊。我就是用RenderTransform属性啊,楼上的。为什么我把它变为右边到左边的排列就鼠标拖得时候就不对了呢。谢谢提点啊
sunyfun 2010-05-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lllmaliyuan 的回复:]
那怎么弄。我要控制他只能在水平发现移动的。垂直想移动也不行这个样子
[/Quote]
这个好控制吧,你只用Canvas.SetLeft来控制不就可以了,top方向无需改变
wuyq11 2010-05-30
  • 打赏
  • 举报
回复
皇城龙三 2010-05-30
  • 打赏
  • 举报
回复
wpf中鼠标拖动控件移动

xaml:

<Canvas Name="canvas2" >
<Canvas Background="Yellow" Canvas.Left="40" Canvas.Top="20" Width="100" Name="canvas1" Height="54" >
<Thumb Name="thumb" Height="20" DragDelta="Thumb_DragDelta" Foreground="{x:Null}" ClipToBounds="False" BorderThickness="5,2,5,0" Width="55" Canvas.Left="24" Canvas.Top="6" Background="GreenYellow"></Thumb>
</Canvas>
</Canvas>


cs:

private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
Canvas.SetLeft(canvas1, Canvas.GetLeft(canvas1) + e.HorizontalChange);
Canvas.SetTop(canvas1, Canvas.GetTop(canvas1) + e.VerticalChange);
}


利用Thumb_DragDelta事件记录的鼠标移动距离,更改canvas的left跟top来实现的
lllmaliyuan 2010-05-30
  • 打赏
  • 举报
回复
那怎么弄。我要控制他只能在水平发现移动的。垂直想移动也不行这个样子
sunyfun 2010-05-30
  • 打赏
  • 举报
回复
你用canvas定位,用来做拖动很容易
sunyfun 2010-05-30
  • 打赏
  • 举报
回复
拖动控件无需那样做吧

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧