StackPanel / Window宽度改变WPF

时间:2015-09-04 08:51:54

标签: c# wpf

我创建了一个窗口,其中两个垂直方向的堆栈面板(左侧和右侧)位于第三个水平方向的堆栈面板中。 左堆栈面板包含许多控件和一个按钮>隐藏&lt ;,绑定到命令。而且我想动画一个"隐藏"右侧stackpanel并将窗口调整为仅左侧stackpanel的宽度。如何以最简单的方式做到这一点? 我找到WPF stackpanel visibilty animation但是,它不会调整窗口大小。

我的代码是:

public class Setting extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_setting);
}
}

2 个答案:

答案 0 :(得分:2)

您可以使用totalslider_second.noUiSlider.destroy(); noUiSlider.create(totalslider_second, newsettings); 上的SizeToContent属性在内容更改时自动调整窗口大小。

我会推荐Window值。

Width

但是有一个问题,即您可能需要指定每个<Window ... SizeToContent="Width" 的宽度,或者在您的窗口上设置StackPanel以防止MinWidth调整大小宽度为0。

答案 1 :(得分:1)

通常动画完全在视图中完成,ViewModel不应该与窗口大小有任何关系。因此,为了保留MVVM,您只需要调整后面代码的大小。这通常是通过查找动画资源。

<Storyboard x:Key="AnimateWindow">
        <DoubleAnimation Duration="0:0:3.8"
                         Storyboard.TargetProperty="Width"
                         From="350"
                         To="100"
                         AccelerationRatio=".1">
        </DoubleAnimation>
</Storyboard>

因此,在按钮单击时,您还需要处理click事件,以便触发动画。 click事件将查找资源并执行它。它还可以处理您需要的任何其他视图特定事物。

private void Button_Click(object sender, RoutedEventArgs e)
{
        var animate= FindResource("AnimateWindow") as Storyboard;
        if (hide != null)
        {
            animate.Begin(this, true);
        }
}

这保留了MVVM并且应该完成你想要的。