如何基于某些条件禁用/启用VisualState? (地铁)

时间:2013-02-12 18:59:51

标签: xaml windows-runtime windows-store-apps visualstatemanager

我为controltemplate中的按钮定义了一个VisualState:

  <ControlTemplate x:Key="ButtonTemplate" TargetType="Button">
      ...
      <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="CommonStates">
          ...
          <VisualState x:Name="PointerOver">
            <Storyboard>
              <DoubleAnimation Storyboard.TargetName="c1" Storyboard.TargetProperty="Opacity" To="0.7"/>
            </Storyboard>
          </VisualState>
          ...
        </VisualStateGroup>
      </VisualStateManager.VisualStateGroups>
      ...
  </ControlTemplate>

但是这个效果(当鼠标悬停时改变不透明度)应该基于viewmodel条件启用/禁用,那么我该如何使用XAML呢?

我尝试为DoubleAnimation的To值创建绑定,但它不起作用,因为Storyboard被冻结了。我也在想像模板选择器,但VisualState Manager没有这样的东西。

1 个答案:

答案 0 :(得分:1)

我最近和某人讨论过这个问题,我可能会将问题的通用解决方案添加到WinRT XAML工具包中,它与WPF中的DataTriggers类似,但是现在我只需要添加一个DependencyProperty控制,将属性绑定到视图模型和值更改 - 更新可视状态。