WPF 控件相关
ListView 其它还有比较多的
GridViewColumn属性:
CellTemplate:指示了一列中除了列标头外 其它行上的单无格数据显示。
ColumnHeaderTemplate:指示了一列中列标头部分,数据的显示形式。
GridView属性:
ColumnHeaderContainerStyle:指示了一列中标头部分的显示风格。
1.ListBox
<XmlDataProvider x:Key="Employees" XPath="/Employees/*"> <x:XData> <Employees xmlns=""> <Employee Name="Terry Adams" Type="FTE" EmployeeNumber="1" /> <Employee Name="Claire O'Donnell" Type="FTE" EmployeeNumber="12345" /> <Employee Name="Palle Peterson" Type="FTE" EmployeeNumber="5678" /> <Employee Name="Amy E. Alberts" Type="CSG" EmployeeNumber="99222" /> <Employee Name="Stefan Hesse" Type="Vendor" EmployeeNumber="-" /> </Employees> </x:XData> </XmlDataProvider> <DataTemplate x:Key="EmployeeItemTemplate"> <TextBlock Text="{Binding XPath=@Name}" /> </DataTemplate> </UserControl.Resources> <Grid ShowGridLines="True"> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <ListBox Grid.Column="1" Name="employeeListBox" ItemsSource="{Binding Source={StaticResource Employees}}" ItemTemplate="{StaticResource EmployeeItemTemplate}" SelectedValue="12345" SelectedValuePath="@EmployeeNumber"/> //将要应用到SelectValue的类型 <TextBox Text="{Binding ElementName=employeeListBox, Path=SelectedValue}"/>
2.TreeView
<ObjectDataProvider x:Key="books1" ObjectType="local:SerialUIDataFactory" MethodName="GetSeiralTreeData"/> <HierarchicalDataTemplate DataType = "{x:Type local:League}" ItemsSource = "{Binding Path=Divisions}"> <TextBlock Text="{Binding Path=Name}"/> </HierarchicalDataTemplate> <HierarchicalDataTemplate DataType = "{x:Type local:Division}" ItemsSource = "{Binding Path=Teams}"> <TextBlock Text="{Binding Path=Name}"/> </HierarchicalDataTemplate> <DataTemplate DataType="{x:Type local:Team}"> <TextBlock Text="{Binding Path=Name}"/> </DataTemplate> HierarchicalDataTemplate 系统将为这样的模板通过判断数据类型连接成串,直到没有可用数据类型定义的HierarchicalDataTemplate模板或以DataTemplate结尾结束 <HierarchicalDataTemplate DataType = "{x:Type local:League}" ItemsSource = "{Binding Path=Divisions}"> <TextBlock Text="{Binding Path=Name}"/> <HierarchicalDataTemplate.ItemTemplate> <HierarchicalDataTemplate DataType="{x:Type local:Division}" ItemsSource="{Binding Path=Teams}"> <TextBlock Text="{Binding Name}"/> </HierarchicalDataTemplate> </HierarchicalDataTemplate.ItemTemplate> </HierarchicalDataTemplate> 上面的定义,则数据类型会自动以子元素使用固定绑定名Name(目前先这样理解) ///////////////////绑定列表后自动 将列表中的元素应用到第一级Item <TreeView x:Name="_mainTreeView" ItemsSource="{Binding}" Grid.Column="0" Grid.Row="0" Width="100" Margin="2,2,2,2" Background="{StaticResource {x:Static SystemColors.ActiveCaptionBrushKey}}">
//WPF展开树
public static void ExpandAll(this System.Windows.Controls.TreeView treeView)
{
ExpandInternal(treeView);
}
private static void ExpandInternal(System.Windows.Controls.ItemsControl targetItemContainer)
{
if (targetItemContainer == null) return;
if (targetItemContainer.Items == null) return;
for (int i = 0; i < targetItemContainer.Items.Count; i++)
{
System.Windows.Controls.TreeViewItem treeItem = targetItemContainer.Items[i] as System.Windows.Controls.TreeViewItem;
if (treeItem == null) continue;
if (!treeItem.HasItems) continue;
treeItem.IsExpanded = true;
ExpandInternal(treeItem);
}
}
public class League { public League(string name) { _name = name; _divisions = new List<Division>(); } string _name; public string Name { get { return _name; } } List<Division> _divisions; public List<Division> Divisions { get { return _divisions; } } } public class Division { public Division(string name) //构造函数也可以是默认构造函数, { _name = name; _teams = new List<Team>(); } string _name; public string Name { get { return _name; } } //不必是只读的,也可以是写 List<Team> _teams; public List<Team> Teams { get { return _teams; } } } public class Team { public Team(string name) { _name = name; } string _name; public string Name { get { return _name; } } } public class ListLeagueList : List<League> { public ListLeagueList() { League l; Division d; Add(l = new League("League A")); l.Divisions.Add((d = new Division("Division A"))); d.Teams.Add(new Team("Team I")); d.Teams.Add(new Team("Team II")); d.Teams.Add(new Team("Team III")); d.Teams.Add(new Team("Team IV")); d.Teams.Add(new Team("Team V")); l.Divisions.Add((d = new Division("Division B"))); d.Teams.Add(new Team("Team Blue")); d.Teams.Add(new Team("Team Red")); d.Teams.Add(new Team("Team Yellow")); d.Teams.Add(new Team("Team Green")); d.Teams.Add(new Team("Team Orange")); l.Divisions.Add((d = new Division("Division C"))); d.Teams.Add(new Team("Team East")); d.Teams.Add(new Team("Team West")); d.Teams.Add(new Team("Team North")); d.Teams.Add(new Team("Team South")); Add(l = new League("League B")); l.Divisions.Add((d = new Division("Division A"))); d.Teams.Add(new Team("Team 1")); d.Teams.Add(new Team("Team 2")); d.Teams.Add(new Team("Team 3")); d.Teams.Add(new Team("Team 4")); d.Teams.Add(new Team("Team 5")); l.Divisions.Add((d = new Division("Division B"))); d.Teams.Add(new Team("Team Diamond")); d.Teams.Add(new Team("Team Heart")); d.Teams.Add(new Team("Team Club")); d.Teams.Add(new Team("Team Spade")); l.Divisions.Add((d = new Division("Division C"))); d.Teams.Add(new Team("Team Alpha")); d.Teams.Add(new Team("Team Beta")); d.Teams.Add(new Team("Team Gamma")); d.Teams.Add(new Team("Team Delta")); d.Teams.Add(new Team("Team Epsilon")); } public League this[string name] { get { foreach (League l in this) if (l.Name == name) return l; return null; } } }
3.菜单
<DockPanel> <Menu DockPanel.Dock="Top"> <MenuItem Header="show_Book"/> <MenuItem Header="showBook_s"/> <Separator/> <MenuItem Header="E_xit"/> <MenuItem Header="E_xit"> <MenuItem Header="show_Book"/> <MenuItem Header="showBook_s"/> <Separator/> <MenuItem Header="E_xit"/> </MenuItem> </Menu> </DockPanel>
4.ToggleButton
IsPressed 表示按钮状态,该状态指示是否按下悬停于按钮上的鼠标左键或空格键。表示是按下状态,还没弹起。
IsChecked 已选中时为True,未选中时为False,不确定状态时为null。
ToggleButton 模板定义:
<ControlTemplate TargetType="{x:Type ToggleButton}"> <Border CornerRadius="3" Background="{TemplateBinding Background}"> <ContentPresenter Margin="3" HorizontalAlignment="Center" VerticalAlignment="Center"/> </Border> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="True"> <Setter Property="Background" Value="{StaticResource KeyLeftImage_0_Uselected}"/> </Trigger> <Trigger Property="IsChecked" Value="False"> <Setter Property="Background" Value="{StaticResource KeyLeftImage_0_Selected}"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate>
5.ImageBrush
Rectangle exampleRectangle = new Rectangle();
exampleRectangle.Width = 75;
exampleRectangle.Height = 75;
ImageBrush myBrush = new ImageBrush();
myBrush.ImageSource = new BitmapImage(new Uri(@"../../20130108192528_wuPLf.bmp", UriKind.Relative));
exampleRectangle.Fill = myBrush;
Content = exampleRectangle;
<Button Foreground="White" FontWeight="Bold" FontSize="16pt" FontFamily="Verdana" Content="Berries" Padding="20" HorizontalAlignment="Left"> <Button.Background> <!-- The ImageBrush's Viewport and TileMode are set to produce a pattern from the image. --> <ImageBrush Viewport="0,0,0.5,0.5" TileMode="FlipXY" ImageSource="pack://siteoforigin:,,,./20130108192528_wuPLf.bmp" /> </Button.Background> </Button>
6.DataGrid
WPF中改变选中行的颜色是很简单的,就是用触发器:比如:以DataGrid为例: <DataGrid.RowStyle > <Style TargetType="DataGridRow"> <Setter Property="Background" Value="White"/> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="LightGray"/> </Trigger> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="LightGray"/> <Setter Property="Foreground" Value="Red"/> </Trigger> </Style.Triggers> </Style> </DataGrid.RowStyle> 但是,我告诉你,如果你没有设置cellStyle,你将会发现上面的代码“貌似”不工作,没用。这一点对 ListView 等等相似控件都是一样的。 事实上,上面代码已经起作用了。IsSelected确实被触发了。问题在哪呢? 答案正确,就在CellStyle上。因为RowStyle 的背景改变了,但CellStyle没变,你是看不出来的。 也就是RowStyle很冤,因为CellStyle是在其上的。所以会被覆盖。原因就是“黑人”“白人”穿着“黑衣服”看起来都是黑的。 改变的方法如下: 加入CellStyle: <DataGrid.CellStyle > <Style TargetType="DataGridCell"> <Style.Triggers > <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="Red"></Setter> </Trigger> </Style.Triggers> </Style> </DataGrid.CellStyle>

浙公网安备 33010602011771号