itemencontrolのitemクリック前後の状態を設定します。


回転:http://www.cnblogs.com/linzheng/p/3764300.html
<Page.Resources>
        <!--        -->
        <DataTemplate x:Key="dataTemplateSelectKey" x:Name="dataTemplateSelectName">
            <Grid Tapped="StackPanel_Tap_1" Background="Red">
                <TextBlock Text="{Binding LastName}" FontSize="50" />
            </Grid>
        </DataTemplate>
        <!--        ,             C#     -->
        <DataTemplate x:Key="dataTemplateDefaultKey" x:Name="dataTemplateDefaultName">
            <StackPanel Orientation="Horizontal" Tapped ="StackPanel_Tap_1" x:Name="sp">
                <TextBlock Text="{Binding LastName}"/>
                <TextBlock Text=", "/>
                <TextBlock Text="{Binding FirstName}"/>
            </StackPanel>
        </DataTemplate>
        <!--         -->
        <DataTemplate x:Key="dataTemplateNoSelectKey" x:Name="dataTemplateNoSelectName">
            <StackPanel Orientation="Horizontal" Tapped ="StackPanel_Tap_1">
                <TextBlock Text="{Binding LastName}"/>
                <TextBlock Text=", "/>
                <TextBlock Text="{Binding FirstName}"/>
            </StackPanel>
        </DataTemplate>
    </Page.Resources>
<StackPanel>
            <ItemsControl x:Name="listbox" ItemTemplate="{StaticResource dataTemplateDefaultKey }" ItemsSource="{Binding lstu}"/>
        </StackPanel>
private void StackPanel_Tap_1(object sender, TappedRoutedEventArgs e)
        {
            student stu = (student)(sender as Panel).DataContext;
            System.Diagnostics.Debug.WriteLine((sender as Panel).GetType().ToString());
            System.Diagnostics.Debug.WriteLine(stu.LastName);
            //sender    item,sender as Panel   item      ,   StackPanel Grid
            //    listbox        ContentPresenter  
            ContentPresenter myContentPresenter = (ContentPresenter)(listbox.ContainerFromItem((sender as Panel).DataContext));
            //                     ,      
            if (myContentPresenter.ContentTemplate.Equals(dataTemplateSelectName))
            {
                //          
                myContentPresenter.ContentTemplate = dataTemplateNoSelectName;
            }
            else
            {
                //         
                myContentPresenter.ContentTemplate = dataTemplateSelectName;
            }
        }
ここでもう一つ注意したいのは、ItemsControlコントロールではなくListBoxコントロールを使用する場合、Contect Presenterオブジェクトを取得する際には、ツリーを可視化して検索する必要があるということです。コードの実装は以下の通りです。
        private void StackPanel_Tap_1(object sender, TappedRoutedEventArgs e)
        {
            var s=(sender as Panel).DataContext;
            //System.Diagnostics.Debug.WriteLine((sender as Panel).GetType().ToString());
            //System.Diagnostics.Debug.WriteLine(stu.LastName);
            //         DataContext          
            //    listbox        ContentPresenter  
            ListBoxItem myListBoxItem = (ListBoxItem)(listbox.ContainerFromItem((sender as Panel).DataContext));
            //                     ,      
            //  ListBoxItem   ContentPresenter

            ContentPresenter myContentPresenter=(ContentPresenter)FindVisualChild<ContentPresenter>(myListBoxItem);

            if (myContentPresenter.ContentTemplate.Equals(dataTemplateSelectName))
            {
                //          
                myContentPresenter.ContentTemplate = dataTemplateNoSelectName;
            }
            else
            {
                //         
                myContentPresenter.ContentTemplate = dataTemplateSelectName;
            }

        }


        //             
        private childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(obj, i);
                if (child != null && child is childItem)
                    return (childItem)child;
                else
                {
                    childItem childOfChild = FindVisualChild<childItem>(child);
                    if (childOfChild != null)
                        return childOfChild;
                }
            }
            return null;
        }