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&apos;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>

 

posted @ 2014-06-16 11:21  高_山_流_水  阅读(184)  评论(0)    收藏  举报