【问题标题】:WPF re-size border at runtimeWPF 在运行时重新调整边框大小
【发布时间】:2013-05-19 17:26:51
【问题描述】:

在 XAML 中设置框架元素(在本例中为边框)宽度是否会阻止我在运行时更改此值?

我有一个包含边框的网格,该边框又包含一些其他控件。我有一个动画,它扩展了网格和边框的宽度和高度,从 0 开始增加值。

然后我在边框上方放置了一个按钮作为调整大小的辅助工具(它是一个无边框窗口)。这是应该重新调整边框大小的代码的 sn-p:

private void GridResize_Click(object sender, RoutedEventArgs e)
{

        startPoint = this.PointToScreen(Mouse.GetPosition(this));
        Mouse.Capture(GridResize);
        Resizing = true;

}

private void Window_MouseMove(object sender, MouseEventArgs e)
{
        if (Resizing)
        {
            FrameworkElement border = (FrameworkElement)LibraryBorder;
            //an arbitrary value for testing 
            border.Width += 20;
            LibraryBorder.InvalidateVisual();
        }
}

初始动画将边框宽度设置为 1500。调试时,两个事件都在注册,Window_MouseMove 正在尝试修改边框宽度。但是它不会改变值 - 它保持在 1500。我将元素转换为 FrameworkElement,希望这将允许我修改 width 属性。我假设我的 xaml 值以某种方式覆盖了我的代码。关于如何解决这个问题的任何想法。我想在我将所有动画移入代码之前我会问一下,以发现有更好的方法(或者代码方法不会有所作为!!)。

提前感谢您的任何回答

【问题讨论】:

  • 您的 Storyboard 是否有默认的 FillBehavior HoldEnd?这将阻止您更改宽度。见Dependency Property Value Precedence
  • 我没有设置这些,也不知道它们是默认值。我会看看 - 谢谢你的指点
  • 如果我将 FillBehavior 设置为 Stop 则动画运行并且值恢复到其原始状态。有没有办法从代码中释放 HoldEnd?
  • 感谢 LPL - 如果您将您的建议作为答案,我会接受。似乎需要将我的 FillBehavior 设置为 Stop,然后为处理 width 属性的双动画处理 onCompleted 事件 - 将其设置为最终值并再次打开该属性进行编辑。
  • 我已添加我的评论作为答案。谢谢。很高兴我能帮上忙。

标签: c# wpf


【解决方案1】:

确保您的 Storyboard 没有默认的 FillBehavior HoldEnd。这将阻止您更改宽度。见Dependency Property Value Precedence

【讨论】:

    猜你喜欢
    • 2011-02-19
    • 2013-07-12
    • 2011-09-22
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    相关资源
    最近更新 更多