• (四)样式和模板


    • 样式

      样式非常有用,它就像是html中的CSS.

      如果你要将某一样式应用到某一类型元素实例,那么你应该只设置Style的TargetType属性而不设置Key属性(同时设置将不产生作用).
      Code
      1 <Window.Resources>
      2 <Style TargetType="Rectangle">
      3 <Setter Property="Fill">
      4 <Setter.Value>
      5 <SolidColorBrush Color="Yellow"></SolidColorBrush>
      6 </Setter.Value>
      7 </Setter>
      8 </Style>
      9 </Window.Resources>
      10 <Canvas Name="canvas">
      11 <Rectangle Name="rect1" Canvas.Left="35" Canvas.Top="29" Height="100" Stroke="Black" Width="200" />
      12 <Rectangle Name="rect2" Canvas.Left="35" Canvas.Top="135" Height="100" Stroke="Black" Width="200"/>
      13 </Canvas>


      如果你要将某一样式定制到某一特定元素实例,那么你应该设置Style的x:Key属性,将要使用该样式的元素的Style进行资源引用.
      Code
      1 <Window.Resources>
      2 <Style x:Key="rectStyle" TargetType="Rectangle">
      3 <Setter Property="Fill">
      4 <Setter.Value>
      5 <SolidColorBrush Color="Yellow"></SolidColorBrush>
      6 </Setter.Value>
      7 </Setter>
      8 </Style>
      9 </Window.Resources>
      10 <Canvas Name="canvas">
      11 <Rectangle Name="rect1" Canvas.Left="35" Canvas.Top="29" Height="100" Stroke="Black" Width="200" Style="{StaticResource ResourceKey=rectStyle}" />
      12 <Rectangle Name="rect2" Canvas.Left="35" Canvas.Top="135" Height="100" Stroke="Black" Width="200"/>
      13 </Canvas>


    数据模板

    控件通常需要呈现某些类型的内容,而这些内容通常来自绑定到的数据.在WPF中,使用DataTemplate可以定义数据的表现形式.
    1. 定义实体:
      Code
      1 public class Person:INotifyPropertyChanged
      2 {
      3 private string name;
      4 private int age;
      5
      6 public event PropertyChangedEventHandler PropertyChanged;
      7
      8 public string Name
      9 {
      10 get
      11 {
      12 return this.name;
      13 }
      14 set
      15 {
      16 if (this.name!=value)
      17 {
      18 this.name = value;
      19 Notify("Name");
      20 }
      21 }
      22 }
      23
      24 public int Age
      25 {
      26 get
      27 {
      28 return this.age;
      29 }
      30 set
      31 {
      32 if (this.age != value)
      33 {
      34 this.age = value;
      35 Notify("Name");
      36 }
      37 }
      38 }
      39
      40 protected void Notify(string propertyName)
      41 {
      42 if (this.PropertyChanged!=null)
      43 {
      44 PropertyChanged(this,new PropertyChangedEventArgs(propertyName));
      45 }
      46 }
      47 }
       
    2. 定义界面:
       
      Code
      1 <Window.Resources>
      2 <DataTemplate x:Key="item" DataType="local:Person">
      3 <UniformGrid Rows="1" Columns="2">
      4 <Label Width="100" Content="{Binding Path=Name}"/>
      5 <TextBox Width="100" Text="{Binding Path=Age}" />
      6 </UniformGrid>
      7 </DataTemplate>
      8 </Window.Resources>
      9 <Grid>
      10 <ListBox ItemTemplate="{StaticResource ResourceKey=item}" ItemsSource="{Binding}">
      11
      12 </ListBox>
      13 </Grid>
    3. 后台代码: 
      Code
      1 public partial class DataTemplateWindow : Window
      2 {
      3 public DataTemplateWindow()
      4 {
      5 InitializeComponent();
      6 ObservableCollection<Person> persons = new ObservableCollection<Person>();
      7 persons.Add(new Person() { Name="zhoulq",Age=27});
      8 persons.Add(new Person() { Name = "peiyf", Age = 22 });
      9 persons.Add(new Person() { Name = "liuwy", Age = 26 });
      10 this.DataContext = persons;
      11 }
      12 }
       
       
    • 控件模板

      控件模板改变控件的外观.
      Code
      1 <Grid>
      2 <Grid.Resources>
      3 <ControlTemplate x:Key="btnTemplate" TargetType="Button">
      4 <Rectangle Fill="Green"></Rectangle>
      5 </ControlTemplate>
      6 </Grid.Resources>
      7 <Button Width="40" Height="20" Template="{DynamicResource ResourceKey=btnTemplate}"></Button>
      8 </Grid>
    • 触发器

      Code
      1 <Window.Resources>
      2 <Style TargetType="{x:Type TextBox}">
      3 <Style.Triggers>
      4 <MultiTrigger>
      5 <MultiTrigger.Conditions>
      6 <Condition Property="Text" Value="me"/>
      7 <Condition Property="IsMouseOver" Value="False"/>
      8 </MultiTrigger.Conditions>
      9 <Setter Property="Background" Value="Red"></Setter>
      10 </MultiTrigger>
      11 </Style.Triggers>
      12 </Style>
      13 </Window.Resources>
      14 <Grid>
      15 <TextBox Height="23" HorizontalAlignment="Left" Margin="56,68,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" />
      16 </Grid>
  • 相关阅读:
    第五节: EF高级属性(一) 之 本地缓存、立即加载、延迟加载(不含导航属性)
    第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法
    第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery )
    Android ListView常见配置说明
    如何配置IIS使其支持APK文件的下载
    Android scrollview和GridView混合使用
    WCF配置后支持通过URL进行http方式调用
    转战博客园
    Android Intent参数传递
    Android 使用SQLite
  • 原文地址:https://www.cnblogs.com/kingge/p/2035426.html
Copyright © 2020-2023  润新知