设置itemcontrol的item点击前后不同状态
来源:互联网 发布:政府集中采购流程 知乎 编辑:程序博客网 时间:2024/05/29 10:07
转自: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; } }
在这里还要注意一点的是,如果使用的时ListBox控件而不是ItemsControl控件的时候,在获取ContentPresenter对象的时候需要通过可视化树去查找。代码的实现如下所示:
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; }
0 0
- 设置itemcontrol的item点击前后不同状态
- listview为不同的item设置不同的点击事件
- android Listview中设置enable状态,显示点击的item
- Androd中 listView点击每一个 Item里面的状态,跳转到相对应的不同 界面
- android 如何设置checkbox、edittext点击前后不同样式
- ListView设置Item的状态
- 记录:在使用 Adapter是对 item的点击设置,合并,不同布局实现
- 答网友疑问:如何动态设置ItemControl的GroupStyle
- 设置RecyclerView的item的点击事件
- listview的item点击效果设置
- RecyclerView的Item设置点击监听事件
- GridView设置不同的item(布局)
- ListView设置不同item
- android中通过网络请求数据显示在Listview中,面对许多的item,如何给每个item设置点击事件以跳转到不同的activity
- listview的item中不同的点击按钮触发不同的点击事件
- 链接点击前后的颜色设置以及消除链接下划线
- 前后台使用不同二级域名的Ueditor设置
- 如何记录Listview中item的点击状态
- 选择问题——选出第K个最大的元素
- 定义一个日期类,对日期进行设置,判断是否为闰年
- UI_XML&JSON
- 腾格里沙漠部分污染地被填埋 记者采访被限自由
- 第二章第四题
- 设置itemcontrol的item点击前后不同状态
- 腾格里沙漠部分污染地被填埋 记者采访被限自由
- Android中广播接收者的注册与释放
- Nginx高性能WEB服务器系列
- 第二章第六题
- 正则表达式简单用法
- C++学习之数组名a与&a的区别
- Android:动态注册BroadcastReceiver
- hibernate的抓取策略