2013-06-19 41 views
0

請幫助我把事情放在一起。在城域UI應用程序中更改所選ListViewItem的文本顏色

我正在使用包含ListView的Windows 8 metro應用程序。我的列表視圖包含TextBlocks。 事情是這樣的:

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的顏色,所以在設計模式下,我選擇「編輯其他模板/編輯生成的項容器」創造的ListViewItem的風格自己的副本內StandardStyles.xml:

<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的顏色應該是黑色的。如果沒有選擇項目 - 白色。

這裏是一個問題:在哪裏應該把chaning TextBlock顏色的邏輯?如果在StandardStyles.xml中的某處,我將如何將它分配給TextBlock?如果在列表視圖項目模板中的某個地方,那麼我應該如何獲得選擇狀態?

非常感謝您的幫助! 謝謝。

回答

1

編輯:

嘗試在ChainsListViewItemStyle風格將這些動畫的SelectionStatesVisualStateGroup

<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> 
+0

不幸的是在WinRT中無觸發。 –

+0

嗯,我學到了一些新東西!在這種情況下,您將需要使用VisualStateManager。我會更新我的答案。 –

+0

Richard,在我的第一篇文章中,我爲ChainsListViewItemStyle放置了樣式。並在文中有一條評論: <! - 視覺狀態描述在這裏(我改變了一些顏色) - > 所以我已經玩視覺狀態和改變顏色。但是我看不出如何從可視狀態引用DataTemplate中描述的TextBlock。你提出的方法將無法工作,因爲實際上我有幾個TextBlocks,它們應該是不同的顏色。更改ContentPresenters的屬性是不夠的。 –

相關問題