1

我的应用程序(MVVM Light)调整了它的主窗口大小(隐藏并用动画显示)。对于动画,我使用带有来自 StaticResources 的参数的 DataTrigger:

<Window.Resources>
    <system:Double x:Key="WindowMaxWidth">400</system:Double>
    <system:Double x:Key="WindowMinWidth">25</system:Double>
</Window.Resources>
<Window.Style>
    <Style TargetType="Window">
        <Style.Triggers>
            <DataTrigger Binding="{Binding DropBox.IsShown}" Value="True">
                <DataTrigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Width"
                                             To="{StaticResource WindowMaxWidth}"
                                             Duration="0:0:0:0.2"/>
                        </Storyboard>
                    </BeginStoryboard>
                </DataTrigger.EnterActions>
                <DataTrigger.ExitActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Width"
                                             To="{StaticResource WindowMinWidth}"
                                             Duration="0:0:0:0.2"/>
                        </Storyboard>
                    </BeginStoryboard>
                </DataTrigger.ExitActions>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Style>

在我的 ViewModel 中,我需要我的窗口的宽度值,所以我绑定了它。问题是它默认为0,所以我必须用一个值来初始化它。实际上需要的是我的静态资源中的值:WindowMaxWidth

  1. 我无法将 WindowMaxWidth 的值移动到 ViewModel,因为 DataTriggr 不接受绑定(它抱怨线程)
  2. 我不想在 StaticResources 和 ViewModel 中分别保留相同的值以避免不一致。

我应该怎么办?

4

2 回答 2

2

WindowMaxWidthandWindowMinWidth放入您的视图模型中并使用以下命令引用它们x:Static

namespace MyNamespace
{
   class ViewModel
   {
      public static double WindowMaxWidth = 400;
      public static double WindowMinWidth = 25;
   }
}

导入正确的命名空间xmlns:myns="clr-namespace:MyNamespace"

<DoubleAnimation Storyboard.TargetProperty="Width"
    To="{x:Static myns:ViewModel.WindowMaxWidth}"
    Duration="0:0:0:0.2"/>
于 2013-11-09T21:30:21.123 回答
0

您可以以这种方式使用后面的代码(例如在构造函数中,在将 DataContext 设置为 ViewModel 之后):

(this.DataContext as MyViewModel).MyWindowWidth = (double)this.FindResource("WindowMaxWidth");
于 2013-11-09T21:40:48.967 回答