wpf 如何改变控件大小,位置

Tim_Andy 2011-04-10 09:05:01

private void MainText_SizeChanged(object sender, SizeChangedEventArgs e)
{
TextBox ChangedTextBox = (TextBox)sender;
if (ChangedTextBox.IsFocused)
{
FocusBorder.Margin = ChangedTextBox.Margin;
FocusBorder.Width = ChangedTextBox.ActualWidth;
FocusBorder.Height = ChangedTextBox.ActualHeight;
}
}

------------------
MainText外面套了个border,当MainText改变时border也跟着改变.但实际运行时border大小并没有变化.
请问该如何处理 --wpf
...全文
1355 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tim_Andy 2011-04-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 duanzilin 的回复:]
border改变位置大小,也必须要有动画才能实现迅雷的效果,如果没动画不如就给每个定义一个样式,在OnFocus状态时显示一个发光的border

Border确实可以改变大小和位置,但是不同位置它的内部布局元素也要变,但是如果你要改变它内部的布局和元素,这样消耗一样不小
[/Quote]
---
有点明白了,谢谢指导.结贴给分.
沝林 2011-04-10
  • 打赏
  • 举报
回复
border改变位置大小,也必须要有动画才能实现迅雷的效果,如果没动画不如就给每个定义一个样式,在OnFocus状态时显示一个发光的border

Border确实可以改变大小和位置,但是不同位置它的内部布局元素也要变,但是如果你要改变它内部的布局和元素,这样消耗一样不小
Tim_Andy 2011-04-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 duanzilin 的回复:]
你实现的思路不对,border属于布局元素,本身不能移动,border的大小也不能小于其内部布局的大小
[/Quote]
--
border和textbox在同一个Grid内是可以移动的
移动的是通过动画实现的.改变大小也可以通过动画实现但是太卡,想通过编程的方法直接改为目标位置,大小.
沝林 2011-04-10
  • 打赏
  • 举报
回复
你实现的思路不对,border属于布局元素,本身不能移动,border的大小也不能小于其内部布局的大小
Tim_Andy 2011-04-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 duanzilin 的回复:]
首先,你要跟踪下代码确定是否触发事件,并且进入IF语句分支内部;
另外很多个文本框都在这个border内部吗?如果是这样的话,你将无法改变border的大小,因为此时Boder的MinWidth和MinHeight根据内部多个控件的大小已经确定,不能再变小

如果你只是想隐藏其他控件,建议使用Trigger来控制多个文本框的显示和隐藏
[/Quote]
---
IF内部语句确实执行了,
我想要的是类似与迅雷7的文本框切换时 border跟随有焦点的那个文本框.并且,我的文本框可以改变大小.我想在改变大小的时候有焦点的文本框外边的border也改变大小
沝林 2011-04-10
  • 打赏
  • 举报
回复
首先,你要跟踪下代码确定是否触发事件,并且进入IF语句分支内部;
另外很多个文本框都在这个border内部吗?如果是这样的话,你将无法改变border的大小,因为此时Boder的MinWidth和MinHeight根据内部多个控件的大小已经确定,不能再变小

如果你只是想隐藏其他控件,建议使用Trigger来控制多个文本框的显示和隐藏
Tim_Andy 2011-04-10
  • 打赏
  • 举报
回复
断点验证,事件出发了.但是 FocusBorder.Width = ChangedTextBox.ActualWidth;
FocusBorder.Height = ChangedTextBox.ActualHeight;
执行完后,border的width和height没有变
Tim_Andy 2011-04-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 duanzilin 的回复:]
你要什么样的需求啊,你说的情况有很多种可能,

首先,事件是否触发?
另外,ChangedTextBox.IsFocused,判断文本框是否获取焦点,我在想在获取焦点状态下如何改变文本框大小,难道是文本框可以拖动改变大小?
[/Quote]
-----
对,文本框可以拖动改变大小.
沝林 2011-04-10
  • 打赏
  • 举报
回复
你要什么样的需求啊,你说的情况有很多种可能,

首先,事件是否触发?
另外,ChangedTextBox.IsFocused,判断文本框是否获取焦点,我在想在获取焦点状态下如何改变文本框大小,难道是文本框可以拖动改变大小?
Tim_Andy 2011-04-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 duanzilin 的回复:]
可以试下下面的方法,通过绑定方式设置宽度和高度

<Border Width={Binding ActualWidth,ElementName=ChangedTextBox,Mode=OneWay}>
<TextBox x:Name="ChangedTextBox" Text=""/>
</Border
[/Quote]
-----
关键是有好多文本框,这个border不一定在这个文本框上.
沝林 2011-04-10
  • 打赏
  • 举报
回复
可以试下下面的方法,通过绑定方式设置宽度和高度

<Border Width={Binding ActualWidth,ElementName=ChangedTextBox,Mode=OneWay}>
<TextBox x:Name="ChangedTextBox" Text=""/>
</Border
Tim_Andy 2011-04-10
  • 打赏
  • 举报
回复
牛人快来吧,wpf太奇怪了

110,549

社区成员

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

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

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