wpf 中 theme 的使用 和 listview 模板的使用.
theme 文件
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfProjecrt.Hpcontrol">
<DataTemplate x:Key="HumanMessageDataTemplate">
<TextBlock Text="hello world"
Margin="0,0,0,0"
HorizontalAlignment="Right"
Foreground="#4d4d4d"
TextWrapping="Wrap"
FontSize="16"
FontFamily="楷体"/>
</DataTemplate>
<DataTemplate x:Key="DriverMessageDataTemplate">
<Grid HorizontalAlignment="Left">
<Grid Background="#ffffff">
<local:TestControl></local:TestControl>
</Grid>
</Grid>
</DataTemplate>
</ResourceDictionary>
2, 将theme 文件添加到App.xaml文件
<Application x:Class="WpfProjecrt.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfProjecrt"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/themes/ThemeList.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
3, 添加listview 的选择器 ListDataTemplateSelector
public class ListDataTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
DataTemplate dt= App.Current.Resources["DriverMessageDataTemplate"] as DataTemplate;
return dt;
// return App.Current.Resources["DriverMessageDataTemplate"] as DataTemplate;
}
}
4, 使用 现实的xml文件
<Window x:Class="WpfProjecrt.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfProjecrt"
xmlns:local2="clr-namespace:WpfProjecrt.Hpcontrol"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0">
<Image x:Name="mg" Height="100" Width="100"></Image>
<TextBlock Name="tb" >open web page</TextBlock>
<ComboBox x:Name="cb" DisplayMemberPath="name" ItemsSource="{Binding mm}"></ComboBox>
</StackPanel>
<ListView ItemsSource="{Binding mm}" ItemTemplateSelector="{Binding lss}" Grid.Row="1" x:Name="lw" Padding="0,16,0,0">
</ListView>
</Grid>
</Grid>
</Window>
对应后面的cs 文件
public class Meal
{
public string name
{
set;
get;
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;
this.DataContext = this;
// cb.ItemsSource = mcollection;
//lw.ItemsSource = mcollection;
//lw.ItemTemplateSelector = ListViewDataTemplateSelector;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
var link = new Hyperlink()
{
NavigateUri = new Uri("https://www.baidu.com"),
Inlines = { new Run() { Text = "baidu" } }
};
link.Click += Link_Click;
tb.Inlines.Add( link );
for(int i=0; i<100; i++)
{
Meal m = new Meal();
m.name = i.ToString();
mcollection.Add(m);
}
// mg.Source=new ImageSource()
BitmapImage image = new BitmapImage(new Uri("./imgs/123.jpg", UriKind.Relative));
mg.Source = image;
}
private ObservableCollection<Meal> mcollection = new ObservableCollection<Meal>();
public ObservableCollection<Meal> mm
{
get
{
return mcollection;
}
}
public ListDataTemplateSelector lss
{
get
{
return ls;
}
}
private ListDataTemplateSelector ls = new ListDataTemplateSelector();
private void Link_Click(object sender, RoutedEventArgs e)
{
System.Diagnostics.Process.Start(((Hyperlink)sender).NavigateUri.ToString());
}
}
总结, xml 文件绑定属性最好用CLR的包装器包装一下,
否则可能包装不上。
wpf 中 theme 的使用 和 listview 模板的使用.的更多相关文章
- 在WPF中自定义控件(3) CustomControl (上)
原文:在WPF中自定义控件(3) CustomControl (上) 在WPF中自定义控件(3) CustomControl (上) 周银辉 ...
- WPF 显示文件列表中使用 ListBox 变到ListView 最后使用DataGrid
WPF 显示文件列表中使用 ListBox 变到ListView 最后使用DataGrid 故事背景: 需要检索某目录下文件,并列出来,提供选择和其他功能. 第一版需求: 列出文件供选择即可,代码如下 ...
- WPF 中获取DataGrid 模板列中控件的对像
WPF 中获取DataGrid 模板列中控件的对像 #region 当前选定行的TextBox获得焦点 /// <summary> /// 当前选定行的TextBox获得焦点 /// &l ...
- WPF中的数据模板(DataTemplate)(转)
原文地址 http://www.cnblogs.com/zhouyinhui/archive/2007/03/30/694388.html WPF中的数据模板(DataTemplate) ...
- WPF中的ControlTemplate(控件模板)(转)
原文地址 http://www.cnblogs.com/zhouyinhui/archive/2007/03/28/690993.html WPF中的ControlTemplate(控件模板) ...
- WPF中通过代码定义模板
WPF中可以再XAML中定义模板,也可以通过C#代码定义模板,通过代码可能更清楚的看清其逻辑,而且代码的好处就是可以随时动态的去操作,而在XAML中定义的一般都是静态的. //控件呈现的显示内容1(这 ...
- wpf中的数据模板
wpf中的模板分为数据模板和控件模板,我们可以通过我们自己定制的数据模板来制定自己想要的数据表现形式.例如:时间的显示可以通过图片,也可以通过简单数字表现出来. 例如: (1)先在Demo这个命名空间 ...
- WPF中ListBox /ListView如何改变选中条背景颜色
适用ListBox /ListView WPF中LISTVIEW如何改变选中条背景颜色 https://www.cnblogs.com/sjqq/p/7828119.html
- WPF中的数据模板(DataTemplate)
原文:WPF中的数据模板(DataTemplate) WPF中的数据模板(DataTemplate) ...
随机推荐
- Shell编程之条件语句:if、case语句
Shell编程之条件语句:if.case语句 一.条件测试 1)test命令测试 2)整数值比较 ...
- C语言:小数(float double)
小数分为整数部分和小数部分,它们由点号.分隔,例如 0.0.75.0.4.023.0.27.-937.198 -0.27 等都是合法的小数,这是最常见的小数形式,我们将它称为十进制形式.此外,小数也可 ...
- Java基础00-多线程28
1. 实现多线程 1.1 进程 1.2 线程 1.3 多线程的实现方式(方式一:继承Thread类) 代码示例:定义类MyThread: //1:定义一个类MyThread继承Thread类 publ ...
- dart pub上传失败如何解决
问题: Flutter Exception: Pub will wait for a while before trying to connect again. 解决 1.设置终端代理 export ...
- 痞子衡嵌入式:了解i.MXRTxxx系列ROM中灵活的串行NOR Flash启动硬复位引脚选择
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRTxxx系列ROM中灵活的串行NOR Flash启动硬复位引脚选择. 关于 i.MXRT 系列 BootROM 中串行 NOR ...
- 排列组合的实现(js描述)
组合的实现 排列组合描述和公式 犹记得高中数学,组合表示C(m, n),意思为从集合m,选出n个数生成一项,总共有多少个项的可能?组合是无序的,排列是有序的.所以排列的项数量多于组合 排列A(n,m) ...
- 查看JVM默认参数及微调JVM启动参数
目录 查看某个JVM进程堆内存信息 微调JVM启动参数 查看JVM的一些默认参数 参考廖雪峰老师的这篇 JVM调优的正确姿势: https://www.liaoxuefeng.com/article/ ...
- Docker的学习体验
由于兴致使然,便想学习一点Docker技术.于是,写了这篇学习Docker的体会.笔拙,见谅. 第一件事--把网线插上 相信很多人都被官网的<Sample application>的 do ...
- 忘记Apple ID密码,如何从iPhone/iPad上移除iCloud账号
忘记Apple ID密码?不用担心!在本文中,我们将分享3种有效方法,即使您不知道密码,也可以轻松移除iPhone或iPad设备上的iCloud账号. 注意:移除iCloud 账号前请备份数据 在开始 ...
- 手写一个超简单的Vue
基本结构 这里我根据自己的理解模仿了Vue的单文件写法,通过给Vue.createApp传入参数再挂载元素来实现页面与数据的互动. 其中理解不免有错,希望大佬轻喷. 收集数据 这里将Vue.creat ...