DisplayStateBehavior最初未在列表框项模板中应用状态转换

时间:2012-04-09 16:57:23

标签: wpf mvvm datatemplate expression-blend visualstatemanager

我有一个包含视觉状态的列表框项目模板。我有DisplayStateBehaviors将状态设置为开/关状态。我的实施只有1/2工作。在初始显示时,无论DataContext中的值如何,基本状态都是活动的。当DataContext中的数据发生更改时,将激活正确的状态。

如何在列表框的初始显示中显示正确的状态。

出于安全原因,我无法复制/粘贴XAML或View-Model代码。

编辑:虽然我无法复制/粘贴真实代码,但以下骨架有望重现此问题。

在全局可见的资源文件中:

<DataTemplate x:Key="MyObjectItemTemplate">
  <Grid>
    <VisualStateManager.VisualStateGroups>
      ... blend goodness ...
    </VisualStateManager.VisualStateGroups>   
  </Grid>
</DataTemplate>

通过将数据上下文与主UI中列表框的ItemsTemplate属性相关联,将数据上下文传递到数据模板中。

<ListBox ... ItemTemplate="{DynamicResource MyObjectItemTemplate}" .../>

1 个答案:

答案 0 :(得分:0)

我发现了我的问题。如果它帮助了其他人,我所做的就是将DataTemplate的内容提取到UserControl中。这使一切按预期工作。 DataTemplate仍然存在并且仍然存在,但它只有一个元素 - 用户控件。视觉状态都是用户控件的一部分。

在全局可见的资源文件中:

<DataTemplate x:Key="MyObjectItemTemplate">
     <MyNamespace:MyUserControl/>
</DataTemplate>

在单独的文件MyUserControl.cs

<UserControl ... x.Class="MyNamespace.MyUserControl" ...>
  <Grid>
    <VisualStateManager.VisualStateGroups>
      ... blend goodness ...
    </VisualStateManager.VisualStateGroups>   
  </Grid>
</UserControl>

通过将数据上下文与主UI中列表框的ItemsTemplate属性相关联,将数据上下文传递到数据模板中。

<ListBox ... ItemTemplate="{DynamicResource MyObjectItemTemplate}" .../>