zoukankan      html  css  js  c++  java
  • WPF那些事儿

    概述

    感觉学习的东西必须做个记录,不然很快就忘掉了。现在把WPF学习过程中一些零碎的东西记录在下面,没有具体的主题,想到啥、看到啥都写在这里,算是复习一下并做个备忘吧。

    1. 等待对话框

    看到同事做的项目中需要一个等待对话框大致如下:

    同事用定时器实现了这个效果,实际在WPF中,这个效果可以很容易通过动画实现。

    <Grid>
        <TextBlock x:Name="searchTextBlock"
                   HorizontalAlignment="Center"
                   VerticalAlignment="Center"
                   FontFamily="微软雅黑"
                   FontSize="24">
            <TextBlock.Triggers>
                <EventTrigger RoutedEvent="TextBlock.Loaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <StringAnimationUsingKeyFrames Duration="0:0:1.6"
                                                           RepeatBehavior="Forever"
                                                           Storyboard.TargetName="searchTextBlock"
                                                           Storyboard.TargetProperty="(TextBlock.Text)">
                                <DiscreteStringKeyFrame KeyTime="0:0:0" Value="正在查询" />
                                <DiscreteStringKeyFrame KeyTime="0:0:0.4" Value="正在查询." />
                                <DiscreteStringKeyFrame KeyTime="0:0:0.8" Value="正在查询.." />
                                <DiscreteStringKeyFrame KeyTime="0:0:1.2" Value="正在查询..." />
                            </StringAnimationUsingKeyFrames>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </TextBlock.Triggers>
        </TextBlock>
    </Grid>

    2. XAML中的特殊字符

    2.1 在XAML中设置“{”和"}"

    3. 静态资源当作元素使用

    如果不设置x:Shared="false"(默认情况x:Shared="true"),这个资源将只有一个实例,不能使用多次(因为不能是多个Visual对象的子元素或者CompositionTarget的根元素)

    4. 同步选中项

    如果多个选择控件(ListBox、ComboBox)绑定到同一个集合,可以通过设置"IsSynchronizedWithCurrentItem"让这些控件的选中项保持一致,但是如果有多个选中项,则目前只有第一项会保持一致

    <StackPanel>
        <ListBox DisplayMemberPath="Name"
                 IsSynchronizedWithCurrentItem="True"
                 ItemsSource="{Binding Students}" />
        <ListBox DisplayMemberPath="Age"
                 IsSynchronizedWithCurrentItem="True"
                 ItemsSource="{Binding Students}" />
        <ComboBox IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Students}" />
    </StackPanel>
    同步选中项

    5. 定义一个集合的视图

    如果把一个集合绑定到一个ItemsControl,则会在ItemsControl和集合之间插入视图,可以对视图进行排序、分组、过滤、导航等操作。

    5.1 排序、分组、过滤和导航

    分组需要为ItemsControl指定一个GroupStyle。

    var view = CollectionViewSource.GetDefaultView(this.Students);
    
    if (view.SortDescriptions.Count > 0
        && view.SortDescriptions[0].PropertyName == "Age"
        && view.SortDescriptions[0].Direction == ListSortDirection.Ascending)
    {
        view.SortDescriptions.Clear();
        view.SortDescriptions.Add(new SortDescription("Age", ListSortDirection.Descending));
    }
    else
    {
        view.SortDescriptions.Clear();
        view.SortDescriptions.Add(new SortDescription("Age", ListSortDirection.Ascending));
    }
    排序
    var view = CollectionViewSource.GetDefaultView(this.Students);
    
    if (view.GroupDescriptions.Count > 0)
    {
        view.GroupDescriptions.Clear();
    }
    else
    {
        view.GroupDescriptions.Add(new PropertyGroupDescription("Birthday",
            new DateTimeToDateConverter()));
    }
    分组 
    <ListBox.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    <Border BorderBrush="Black" BorderThickness="1">
                        <TextBlock FontWeight="Bold" Text="{Binding Name}" />
                    </Border>
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
        </GroupStyle>
    </ListBox.GroupStyle>
    分组Style 
    var view = CollectionViewSource.GetDefaultView(this.Students);
    
    if (view.Filter != null)
    {
        view.Filter = null;
    }
    else
    {
        view.Filter = obj => ((Student)obj).Name == "Jim";
    }
    过滤  
    var view = CollectionViewSource.GetDefaultView(this.Students);
    view.MoveCurrentToPrevious();
    
    if (view.IsCurrentBeforeFirst)
    {
        view.MoveCurrentToLast();
    }
    导航

     效果如下:

  • 相关阅读:
    自己的理想,成长过程逐渐明确
    泯灭众人咱不怕。本身就是一个凡人。重要的是,做一个认真的平凡人。
    Access开端
    JsonHelper使用方式
    安装Office Visio 2007 中文版提示找不到安装源
    今天记
    BINGMAPS GPS经纬度格式转换。
    access 基础知识
    (井底之蛙)惭愧丢人的两段代码希望以后多多长进,警醒自己
    脱离SVN版本控制。DAT文件语句。
  • 原文地址:https://www.cnblogs.com/ShengM/p/4198140.html
Copyright © 2011-2022 走看看