0

如何把东西放在一起?

我正在开发包含 ListView 的 Windows 8 Metro 应用程序。我的列表视图包含文本块。像这样的东西:

MyPage.xaml:

<DataTemplate x:Key="ListViewItemTemplate">
     <StackPanel>
          <TextBlock Text="{Binding Goal, Mode=OneWay}"/>
     </StackPanel>
 </DataTemplate>

<ListView x:Name="ChainsList" 
          ItemsSource="{Binding Chains}" 
          SelectedItem="{Binding Path=SelectedChain, Mode=TwoWay}"
          ItemTemplate="{StaticResource ListViewItemTemplate}" 
          ItemContainerStyle="{StaticResource ChainsListViewItemStyle}">
</ListView>

我不喜欢选定/取消选定项目的默认 ListView 颜色,因此在设计器模式下,我选择了“编辑其他模板/编辑生成的项目容器”并在 StandardStyles.xml 中创建了自己的 ListViewItem 样式副本:

<Style x:Key="ChainsListViewItemStyle" TargetType="ListViewItem">
    <!-- a lot of setters goes here -->
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListViewItem">
                <Border x:Name="OuterContainer">
                    <!-- description of visual states goes here (I changed some colors) -->
                    <Grid x:Name="ReorderHintContent" Background="Transparent">
                       <!-- List view item structure details goes here -->
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

现在我想根据选择更改列表视图项的文本颜色。如果项目选择了 TextBlock 的颜色应该是黑色的。如果未选择项目 - 白色。

这里有一个问题:我应该把改变 TextBlock 颜色的逻辑放在哪里?如果在 StandardStyles.xml 中的某个地方,那么我将如何将它分配给 TextBlock?如果在列表视图项模板中的某个地方,那么我应该如何获得选择状态?

4

1 回答 1

1

编辑:

尝试将这些动画添加到SelectionStates VisualStateGroup您的ChainsListViewItemStyle风格中:

<VisualState x:Name="Unselected">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="contentPresenter">
            <DiscreteObjectKeyFrame KeyTime="0" Value="White"/>
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>
<VisualState x:Name="Selected">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="contentPresenter">
            <DiscreteObjectKeyFrame KeyTime="0" Value="Black"/>
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>
<VisualState x:Name="SelectedSwiping">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="contentPresenter">
            <DiscreteObjectKeyFrame KeyTime="0" Value="Black"/>
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>
<VisualState x:Name="SelectedUnfocused">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="contentPresenter">
            <DiscreteObjectKeyFrame KeyTime="0" Value="Black"/>
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>
于 2013-06-19T19:39:01.307 回答