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;
}