WPF 笔记 五 ListView ComboBox TabControl
WPF ListView
入门例子
<Grid> <ListView Margin="10"> <ListViewItem> <StackPanel Orientation="Horizontal"> <Image Source="/WpfTutorialSamples;component/Images/bullet_green.png" Margin="0,0,5,0" /> <TextBlock>GreenTextBlock> StackPanel> ListViewItem> <ListViewItem> <StackPanel Orientation="Horizontal"> <Image Source="/WpfTutorialSamples;component/Images/bullet_blue.png" Margin="0,0,5,0" /> <TextBlock>BlueTextBlock> StackPanel> ListViewItem> <ListViewItem IsSelected="True"> <StackPanel Orientation="Horizontal"> <Image Source="/WpfTutorialSamples;component/Images/bullet_red.png" Margin="0,0,5,0" /> <TextBlock>RedTextBlock> StackPanel> ListViewItem> ListView> Grid>
数据绑定
<Grid> <ListView Margin="10" Name="lvDataBinding">ListView> Grid>
namespace WpfApp1 { ////// MainWindow.xaml 的交互逻辑 /// public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); List items = new List (); items.Add(new User() { Name = "John Doe", Age = 42 }); items.Add(new User() { Name = "Jane Doe", Age = 39 }); items.Add(new User() { Name = "Sammy Doe", Age = 13 }); lvDataBinding.ItemsSource = items; } } public class User { public string Name { get; set; } public int Age { get; set; } public override string ToString() { return this.Name + ", " + this.Age + " years old"; } } }
前端使用ItemTemplate
"10" Name="lvDataBinding"> "Name: " /> "{Binding Name}" FontWeight="Bold" /> ", " /> "Age: " /> "{Binding Age}" FontWeight="Bold" /> " (" /> "{Binding Mail}" TextDecorations="Underline" Foreground="Blue" Cursor="Hand" /> ")" />
后台稍作修改
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Listitems = new List (); items.Add(new User() { Name = "John Doe", Age = 42, Mail = "john@doe-family.com" }); items.Add(new User() { Name = "Jane Doe", Age = 39, Mail = "jane@doe-family.com" }); items.Add(new User() { Name = "Sammy Doe", Age = 13, Mail = "sammy.doe@gmail.com" }); lvDataBinding.ItemsSource = items; } } public class User { public string Name { get; set; } public int Age { get; set; } public string Mail { get; set; } } }
使用GridView绑定
<Grid> <ListView Margin="10" Name="lvDataBinding"> <ListView.View> <GridView> <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" /> <GridViewColumn Header="Age" Width="50" DisplayMemberBinding="{Binding Age}" /> <GridViewColumn Header="Mail" Width="150" DisplayMemberBinding="{Binding Mail}" /> GridView> ListView.View> ListView> Grid>
模板化单元格内容
<Grid> <ListView Margin="10" Name="lvUsers"> <ListView.View> <GridView> <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" /> <GridViewColumn Header="Age" Width="50" DisplayMemberBinding="{Binding Age}" /> <GridViewColumn Header="Mail" Width="150"> <GridViewColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Mail}" TextDecorations="Underline" Foreground="Blue" Cursor="Hand" /> DataTemplate> GridViewColumn.CellTemplate> GridViewColumn> GridView> ListView.View> ListView> Grid>
ComboBox
入门例子
<StackPanel Margin="10"> <ComboBox> <ComboBoxItem>ComboBox Item #1ComboBoxItem> <ComboBoxItem IsSelected="True">ComboBox Item #2ComboBoxItem> <ComboBoxItem>ComboBox Item #3ComboBoxItem> ComboBox> StackPanel>
数据绑定
<StackPanel Margin="10"> <ComboBox Name="cmbColors"> <ComboBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Rectangle Fill="{Binding Name}" Width="16" Height="16" Margin="0,2,5,2" /> <TextBlock Text="{Binding Name}" /> StackPanel> DataTemplate> ComboBox.ItemTemplate> ComboBox> StackPanel>
InitializeComponent(); cmbColors.ItemsSource = typeof(Colors).GetProperties();
TabControl
选项卡标签文本自定义显示
<Grid> <TabControl TabStripPlacement="Left"> <TabControl.Resources> <Style TargetType="{x:Type TabItem}"> <Setter Property="HeaderTemplate"> <Setter.Value> <DataTemplate> <ContentPresenter Content="{TemplateBinding Content}"> <ContentPresenter.LayoutTransform> <RotateTransform Angle="270" /> ContentPresenter.LayoutTransform> ContentPresenter> DataTemplate> Setter.Value> Setter> <Setter Property="Padding" Value="3" /> Style> TabControl.Resources> <TabItem Header="General"> <Label Content="Content goes here..." /> TabItem> <TabItem Header="Security" /> <TabItem Header="Details" /> TabControl> Grid>
控制选项卡标签外观
<Grid> <TabControl Margin="10" BorderThickness="0" Background="LightGray"> <TabControl.Resources> <Style TargetType="TabItem"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="TabItem"> <Grid Name="Panel"> <ContentPresenter x:Name="ContentSite" VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Header" Margin="10,2"/> Grid> <ControlTemplate.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter TargetName="Panel" Property="Background" Value="LightSkyBlue" /> Trigger> <Trigger Property="IsSelected" Value="False"> <Setter TargetName="Panel" Property="Background" Value="White" /> Trigger> ControlTemplate.Triggers> ControlTemplate> Setter.Value> Setter> Style> TabControl.Resources> <TabItem Header="General"> <Label Content="Content goes here..." /> TabItem> <TabItem Header="Security" /> <TabItem Header="Details" /> TabControl> Grid>
另外一个例子
<Grid> <TabControl Margin="10" BorderBrush="Gainsboro"> <TabControl.Resources> <Style TargetType="TabItem"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="TabItem"> <Border Name="Border" BorderThickness="1,1,1,0" BorderBrush="Gainsboro" CornerRadius="4,4,0,0" Margin="2,0"> <ContentPresenter x:Name="ContentSite" VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Header" Margin="10,2"/> Border> <ControlTemplate.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter TargetName="Border" Property="Background" Value="LightSkyBlue" /> Trigger> <Trigger Property="IsSelected" Value="False"> <Setter TargetName="Border" Property="Background" Value="GhostWhite" /> Trigger> ControlTemplate.Triggers> ControlTemplate> Setter.Value> Setter> Style> TabControl.Resources> <TabItem Header="General"> <Label Content="Content goes here..." /> TabItem> <TabItem Header="Security" /> <TabItem Header="Details" /> TabControl> Grid>