私のアプリケーション (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。
- DataTriggr がバインディングを受け入れないため (スレッドについて不平を言う)、WindowMaxWidth の値を ViewModel に移動できません。
- 不整合を避けるために、StaticResources と ViewModel で同じ値を別々に保持したくありません。
私は何をすべきか?