Windows Phone 动态改变ListBox样式
使用ListBox时通常会借助ItemTemplate帮助我们实现更复杂多样的样式显示,体现了Xaml的灵活。如何动态改变变ListBox的样式,实现类似电脑资源管理器中列表显示和图标显示形式的替换。简单的做法就是将DataTemplate 定义在<phone:PhoneApplicationPage.Resources>,通过C#代码,动态改变ListBox的DataTemplate。
简单实例xaml代码
<phone:PhoneApplicationPage.Resources>
<DataTemplate x:Key="DataTemplate1">
<Grid>
<StackPanel Orientation="Vertical">
<TextBlock FontSize="40" Foreground="Yellow" Text="{Binding Text1}"></TextBlock>
<TextBlock FontSize="40" Foreground="Yellow" Text="{Binding Text2}"></TextBlock>
</StackPanel>
</Grid>
</DataTemplate>
<DataTemplate x:Key="DataTemplate2">
<Grid>
<StackPanel Orientation="Horizontal">
<TextBlock FontSize="60" Foreground="Red" Text="{Binding Text1}"></TextBlock>
<TextBlock FontSize="60" Foreground="Red" Text="{Binding Text2}"></TextBlock>
</StackPanel>
</Grid>
</DataTemplate>
</phone:PhoneApplicationPage.Resources>
C#代码,借助Resources["Key"]读取资源中的内容
ObservableCollection<TextCol> TextCols = new ObservableCollection<TextCol>()
{
new TextCol(){ Text1="Text1",Text2="Text2" },
new TextCol(){ Text1="Text3",Text2="Text4" },
new TextCol(){ Text1="Text5",Text2="Text6" },
new TextCol(){ Text1="Text7",Text2="Text8" },
};
DataTemplate template;
template = Resources["DataTemplate1"] as DataTemplate;
list.ItemTemplate = template;
list.ItemsSource = TextCols;
通过上边简单的几行代码,只要改变Resources中的key值,就能灵活的改变ListBox的样式。
如果样式的定义代码过长,可以通过动态加载Xaml的方式,将DataTemplate的定义放在xaml文件中
注:需有
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
两个命名空间,已字符串的形式加载只需要第一个
StreamResourceInfo sri = Application.GetResourceStream(uri);
//uri xaml文件路径
using (StreamReader stream = new StreamReader(sri.Stream))
{
temp = stream.ReadToEnd();
}
XamlReader.Load(temp); //返回object对象


Windows Phone 动态改变ListBox样式的更多相关文章
- js动态改变css伪类样式
首先我们来看下页面上需要实现的基本效果,如下图所示: 因此我们可以使用如下js代码来试试看,是否能使用js改变伪类?如下代码所示: $(function() { $('.listnav li').cl ...
- 微信小程序,动态改变样式
小程序目前没有修改样式api,但是可以利用数据绑定实现动态改变样式,可以用view标签模拟page然后改变view标签的样式,以下案例演示了如果改变page背景颜色: <view class=& ...
- vue点击时动态改变样式 ------- 最简单的方法
vue点击时动态改变样式 template中 <li :class="{ active:index==isActive }" @click="changeValue ...
- 动态改变伪元素样式的方(用:after和:before生成的元素)
自己查资料总结的两种方法 一.纯css改变 a:hover:before{left:-20%;} a:hover:after{right:-20%;} a:before{ left:-100%; } ...
- 动态改变actionbar上menu的图标
工作中遇到了一个需求是,在滚动的时候让actionbar上的图标进行变色.实现后在这里总结下思路. 一.先在主题中定义好Actionbar的style <style name="App ...
- WPF中利用后台代码实现窗口分栏动态改变
在WPF中实现窗口分栏并能够通过鼠标改变大小已经非常容易,例如将一个GRID分成竖排三栏显示,就可以将GRID先分成5列,其中两个固定列放GridSplitter. <Grid Backgrou ...
- WPF动态改变主题颜色
原文:WPF动态改变主题颜色 国内的WPF技术先行者周银辉曾介绍过如何动态改变应用程序的主题样式,今天我们来介绍一种轻量级的改变界面风格的方式--动态改变主题色. 程序允许用户根据自己的喜好来对界面进 ...
- winform展示Unity3D文件(支持动态改变文件路径)
winform下展示Unity3D文件可以支持对Unity3D实现的模块进行包装,以及在其他的项目中需要展示Unity3D的界面时候,恰到适宜地进行打开展示,这里我展示如何使用winform打开Uni ...
- javascript改变style样式和css样式
转载 在很多情况下,都需要对网页上元素的样式进行动态的修改.在JavaScript中提供几种方式动态的修改样式,下面将介绍方法的使用.效果.以及缺陷. 1.使用obj.className来修改样式表的 ...
随机推荐
- 【55】让自己熟悉Boost
1.网址:http://boost.org 2.有很多C++组织和网站,但是Boost库有两个优势:a.和标准委员会关系密切:b.加入C++标准的各种功能的测试场.
- 通过IP控制登录系统
项目中有这么一个需求,就是系统仅仅能在指定ip下登录,能够理解为内部系统,仅仅能够在公司訪问 我的代码是这样写的:入不入流不知道,但能解决这个问题. 获得訪问IP代码: String ip = req ...
- [Bootstrap] 6. Navigation
Too Much Navigation? How many of Bootstrap's Navigation Components can we use on a page? 0 1 More th ...
- string中find函数的使用
9.47 编写程序,首先查找string"ab2c3d7R4E6"中的每个数字字符,然后查找其中每个字母字符.编写两个版本的程序,第一个要使用find_first_of,第二个要使 ...
- 学习笔记之SQL Programming DB2
http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp If you intend to update a column or ...
- [Effective C++ --013]以对象管理资源
这一节基本讲述的是将资源放进管理对象,防止忘记释放资源. 1.一般New和Delete使用场景 void fun() { SimpleClass* pSimpleClass1 = new Simple ...
- C#_delegate - 有返回值手工调用
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- HTML5表单内元素的required属性
当表单内元素(如input.textarea)中有required属性并且值不为false的时候,则该字段不能为空,否则提交失败. <input type="text" au ...
- Lucene 搜索功能
搜索过程 图解: 主要 API: IndexSearcher: //所有搜索都通过 IndexSearcher 进行,他们将调用该类中重载的 search() 方法 Query: ...
- 使用Javascript获得网页中通过GET方法提交的参数
下面我将写出一个函数,用来获取GET方法提交的参数 function getParameter(parameterName) { var string = window.location.search ...