继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

WPF 学习记录

郭月翔
关注TA
已关注
手记 27
粉丝 3
获赞 14
  1. DataGrid中要在原有的样式上添加样式,可以使用BasedOn来设定基础样式

    如下面的BasedOn="{StaticResource DataGridRowStyle}"

    前端的基础框架HandyControl,在开发中想设置DataGrid的行的样式,根据某个绑定的值来设定行的背景色(通过转化器设定Convert),代码如下

    <UserControl.Resources>
            <ResourceDictionary>
                <convert:JudgeResultFGConvert x:Key="judgeResultFGConvert" />
            </ResourceDictionary>
    </UserControl.Resources>

    ...........

    <DataGrid.RowStyle>
               <Style TargetType="DataGridRow" BasedOn="{StaticResource DataGridRowStyle}">
                      <Setter Property="Background" Value="{Binding Path=Panduanjieguo, Converter={StaticResource judgeResultFGConvert}}"/>
              </Style>
     </DataGrid.RowStyle>

    代码解释:Convert是设置好的转化器,转化器的代码如下

    [ValueConversion(typeof(int), typeof(Brushes))]

    public class JudgeResultFGConvert : IValueConverter
        {
            //实现接口的两个方法
            #region IValueConverter 成员

            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                Brushes judgeResultFG = null;
                if (value != null)
                {
                    int judgeResultInt = (int)value;
                    if (judgeResultInt == 1)
                        return new SolidColorBrush((Color)ColorConverter.ConvertFromString("#CCFFE6"));
                    else if (judgeResultInt == 2)
                        return new SolidColorBrush((Color)ColorConverter.ConvertFromString("#E0FFFF"));
                    else if (judgeResultInt == 3)
                        return new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFF0F5"));
                }
                {
                    return Brushes.White;
                }
            }

            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }

            #endregion
        }

  2. WPF使用FontAwesome图标字体

    a.到官网https://fontawesome.dashgame.com/下载字体,之后将fontawesome-webfont.ttf放到Assets\Font目录下;

    b.右击fontawesome-webfont.ttf文件选择属性,之后将“生成操作”(英文下应该叫“BuildAction”)下拉选择“资源”;

    c.将字体设置为全局样式,打开App.xaml,在<ResourceDictionary>节点下添加代码

    <Style x:Key="FontAwesome" >
                   <Setter Property="TextElement.FontFamily" Value="pack://application:,,,/Assets/Font/#FontAwesome" />
                    <Setter Property="TextElement.FontSize" Value="14" />
    </Style>

    d.使用字体

    <TextBlock  Text="&#xf2bd;" Style="{StaticResource FontAwesome}"
                           Foreground="White" FontSize="30px" Margin="5"
                           HorizontalAlignment="Right" VerticalAlignment="Center" />

    如果需要后台给前台设置图标,例如导航列表中的图标是维护到数据库中的,那么需要设置的图标和读取图标都不能使用&#xf2bd这样的格式,需要转成“\uf2bd”。

  3. WPF使用模板




    ToolTip模板绑定到使用该模板的控件的值内容上,那么需要在ToolTip模板中这样指定:(注意加粗字体部分)

    <DataGrid.Resources>

                <Style TargetType="ToolTip">
                      <Setter Property="Template">
                            <Setter.Value>
                                 <ContentTemplate>

                                <DataTemplate>
                                       <TextBlock TextWrapping="Wrap"  Width="200" Text="{TemplateBinding ContentControl.Content}"/>

                     </DataTemplate>
                            </ContentTemplate>
                    </Setter.Value>
           </Setter>
</Style>

</DataGrid.Resources>

其中TemplateBinding ContentControl.Content是指具体的绑定内容,使用方式如下

<DataGrid.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Content.Text}" />
                        <Setter Property="ToolTipService.HasDropShadow" Value="True"/>
                        <Setter Property="ToolTipService.Placement" Value="Bottom"/>
                    </Style>
                </DataGrid.CellStyle>

    Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Content.Text}"就是对应模板中的TemplateBinding ContentControl.Content

    注意点:

  1.    1.一定注意是使用:ContentTemplate,而不是ControlTemplate(这会覆盖掉ToolTip的控件自身外观,具体如何,大家不妨试试加深理解)

    2.这其实是对ToolTip做的一个内容模板。规定了ToolTip的内容显示什么。不会影响外观,若要自定义ToolTip外观,再加入ControlTemplate的定义即可

4.去掉控件的边框

    简单的去掉控件边控BorderBrush="{x:null}",此时最好设置背景色为透明色,否则能出现边框



打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP