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

解决方案 »

  1.   

    可以试下下面的方法,通过绑定方式设置宽度和高度<Border Width={Binding ActualWidth,ElementName=ChangedTextBox,Mode=OneWay}>
      <TextBox x:Name="ChangedTextBox" Text=""/>
    </Border
      

  2.   

    -----
    关键是有好多文本框,这个border不一定在这个文本框上.
      

  3.   

    你要什么样的需求啊,你说的情况有很多种可能,首先,事件是否触发?
    另外,ChangedTextBox.IsFocused,判断文本框是否获取焦点,我在想在获取焦点状态下如何改变文本框大小,难道是文本框可以拖动改变大小?
      

  4.   

    断点验证,事件出发了.但是           FocusBorder.Width = ChangedTextBox.ActualWidth;
                    FocusBorder.Height = ChangedTextBox.ActualHeight;
    执行完后,border的width和height没有变
      

  5.   

    首先,你要跟踪下代码确定是否触发事件,并且进入IF语句分支内部;
    另外很多个文本框都在这个border内部吗?如果是这样的话,你将无法改变border的大小,因为此时Boder的MinWidth和MinHeight根据内部多个控件的大小已经确定,不能再变小如果你只是想隐藏其他控件,建议使用Trigger来控制多个文本框的显示和隐藏
      

  6.   

    ---
    IF内部语句确实执行了,
    我想要的是类似与迅雷7的文本框切换时 border跟随有焦点的那个文本框.并且,我的文本框可以改变大小.我想在改变大小的时候有焦点的文本框外边的border也改变大小
      

  7.   

    你实现的思路不对,border属于布局元素,本身不能移动,border的大小也不能小于其内部布局的大小
      

  8.   

    --
    border和textbox在同一个Grid内是可以移动的
    移动的是通过动画实现的.改变大小也可以通过动画实现但是太卡,想通过编程的方法直接改为目标位置,大小.
      

  9.   

    border改变位置大小,也必须要有动画才能实现迅雷的效果,如果没动画不如就给每个定义一个样式,在OnFocus状态时显示一个发光的borderBorder确实可以改变大小和位置,但是不同位置它的内部布局元素也要变,但是如果你要改变它内部的布局和元素,这样消耗一样不小