Xaml 如何更改ListBox项的SelectedItem前景文本

Xaml 如何更改ListBox项的SelectedItem前景文本,xaml,windows-phone-7,windows-phone-8,listbox,textblock,Xaml,Windows Phone 7,Windows Phone 8,Listbox,Textblock,我有下面的列表框。我不知道如何在选中某个项目时更改所选项目文本块文本的前景,然后在未选中某个项目时将其恢复为原始前景颜色,这很可能是在随后选中列表框中的另一个项目时发生的 <ListBox Name="ListBox" SelectionMode="Single" ItemsSource="{Binding}" Margin="{Binding}" toolkit:TiltEffect.IsTiltEnabled="True" SelectionC

我有下面的列表框。我不知道如何在选中某个项目时更改所选项目文本块文本的前景,然后在未选中某个项目时将其恢复为原始前景颜色,这很可能是在随后选中列表框中的另一个项目时发生的

<ListBox Name="ListBox" SelectionMode="Single" ItemsSource="{Binding}" Margin="{Binding}"
                     toolkit:TiltEffect.IsTiltEnabled="True" SelectionChanged="ListBox_SelectionChanged" >
                    <ListBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <toolkit:WrapPanel ItemWidth="159" ItemHeight="Auto" />
                        </ItemsPanelTemplate>
                    </ListBox.ItemsPanel>
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Vertical"  >
                                <Image Source="{Binding Thumbnail}" Width="155" Height="155" />
                                <TextBlock Text="{Binding Name}" TextWrapping="Wrap" FontSize="{StaticResource PhoneFontSizeNormal}" VerticalAlignment="Center" HorizontalAlignment="Center" />
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
我认为列表框的ItemsSource绑定到examle class test.cs的ObservableCollection,如下所示

现在定义SelectionChanged事件

确保使用INotifyPropertyChanged扩展类test.cs,并使用相同的属性定义属性前台,否则动态更改将不会反映出来

    private string tmpforeground;
    public string foreground
    {
        get
        {
            return tmpforeground;
        }

        set
        {
            if (tmpforeground== value)
                return;
            tmpforeground= value;
            NotifyPropertyChanged("foreground");
        }
    }
另外请注意,如果您希望文本块在一次点击时将颜色更改为绿色,然后再次点击以再次更改其颜色,则SelectionChanged事件将不起作用,因为它仅在选择其他项目时起作用。因此,如果您希望在连续的点击上更改颜色,请使用点击事件

<ListBox Name="ListBox" SelectionMode="Single" ItemsSource="{Binding}" Margin="{Binding}"
                 toolkit:TiltEffect.IsTiltEnabled="True" Tap="ListBox_Tap" >

private void ListBox_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
    test tItem = (sender as ListBox).SelectedItem as test;
    test.foreground = "#FFCB202D";
}
您必须编辑ItemContainerStyle编辑其他模板>编辑生成的项目容器ItemContainerStyle

在ItemContainerStyle中,选择了可视状态,您可以对其进行更改

<Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="BorderThickness" Value="0"/>
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="Padding" Value="0"/>
    <Setter Property="HorizontalContentAlignment" Value="Left"/>
    <Setter Property="VerticalContentAlignment" Value="Top"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBoxItem">
                <Border x:Name="LayoutRoot" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Normal"/>
                            <VisualState x:Name="MouseOver"/>
                            <VisualState x:Name="Disabled">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="LayoutRoot">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource TransparentBrush}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <DoubleAnimation Duration="0" To=".5" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="ContentContainer"/>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="SelectionStates">
                            <VisualState x:Name="Unselected"/>
                            <VisualState x:Name="Selected">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="YOUR_NEW_COLOR"/>
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

好吧我看不出在哪里可以选择任何选项来编辑ItemContainerStyle?无论哪种方式,当我将您的代码片段插入我的页面资源元素时,我都会收到一个错误?另外,由于这是针对ListBoxItem的,我应该在哪里引用它?收回我以前的评论!我只是在ListBox元素参数中添加了ItemContainerStyle={StaticResource ListBoxItemStyle1},并相应地更改了ListBoxItemStyle1的前台属性,一切都很好!我仍然想知道如何从上面列出的步骤中获得ItemContainerStyle?不,这是Visual Studio。
    private string tmpforeground;
    public string foreground
    {
        get
        {
            return tmpforeground;
        }

        set
        {
            if (tmpforeground== value)
                return;
            tmpforeground= value;
            NotifyPropertyChanged("foreground");
        }
    }
<ListBox Name="ListBox" SelectionMode="Single" ItemsSource="{Binding}" Margin="{Binding}"
                 toolkit:TiltEffect.IsTiltEnabled="True" Tap="ListBox_Tap" >

private void ListBox_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
    test tItem = (sender as ListBox).SelectedItem as test;
    test.foreground = "#FFCB202D";
}
<Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="BorderThickness" Value="0"/>
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="Padding" Value="0"/>
    <Setter Property="HorizontalContentAlignment" Value="Left"/>
    <Setter Property="VerticalContentAlignment" Value="Top"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBoxItem">
                <Border x:Name="LayoutRoot" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Normal"/>
                            <VisualState x:Name="MouseOver"/>
                            <VisualState x:Name="Disabled">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="LayoutRoot">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource TransparentBrush}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <DoubleAnimation Duration="0" To=".5" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="ContentContainer"/>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="SelectionStates">
                            <VisualState x:Name="Unselected"/>
                            <VisualState x:Name="Selected">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="YOUR_NEW_COLOR"/>
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>