【问题标题】:StackPanel / Window width change WPFStackPanel / 窗口宽度更改 WPF
【发布时间】:2015-11-30 08:50:25
【问题描述】:

我创建了一个窗口,其中两个垂直方向的堆栈面板(左侧和右侧)位于第三个水平方向的堆栈面板中。 左侧堆栈面板包含许多控件和一个按钮 >HideWPF stackpanel visibilty animation 但是,它不会调整窗口大小。

我的代码是:

<Window x:Class="Namespace.MainWindow"
 ...
 x:Name="ololo"
        Height="400" Width="500">
 .....    
<StackPanel Orientation="Horizontal">
            <StackPanel x:Name="Left" Orientation="Vertical">
                <Button Margin="0,10,0,0" Command="{Binding HideCommand}">Hide</Button>
            </StackPanel>
            <StackPanel x:Name="Right" Orientation="Vertical">
            <!--<Controls>-->
            </StackPanel>
    </StackPanel>

【问题讨论】:

  • 那么您是否尝试过以窗口样式链接的 XAML?
  • 我有资源字典——我在那里存储文本框、按钮和字体的样式——你在问这个吗?

标签: c# wpf


【解决方案1】:

您可以使用Window 上的SizeToContent 属性在内容更改时自动调整窗口大小。

我会推荐 Width 值。

<Window ...
    SizeToContent="Width"

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • AnimateWindow 是如何知道左侧堆栈面板的?
    • animate.Begin(this,true) 是后面的代码,但是 this,在后面的代码中是 MainWindow 本身。所以如果你在用户控件中,你需要获取窗口来调用动画。
    • 我无法从 VM 中隐藏 - 这只是视图上的按钮,我认为在 InitializeComponent() 之后它永远不会为空;叫
    • 和 animate.Begin(this, true);
    • 您需要在 xaml 后面的代码中执行此操作,而不是 Viewmodel。动画和视图相关的东西不在视图模型中。您需要处理您的 CLICK 事件。
    猜你喜欢
    • 2010-12-09
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多