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
}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="" Style="{StaticResource FontAwesome}"
Foreground="White" FontSize="30px" Margin="5"
HorizontalAlignment="Right" VerticalAlignment="Center" />如果需要后台给前台设置图标,例如导航列表中的图标是维护到数据库中的,那么需要设置的图标和读取图标都不能使用这样的格式,需要转成“\uf2bd”。
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.一定注意是使用:ContentTemplate,而不是ControlTemplate(这会覆盖掉ToolTip的控件自身外观,具体如何,大家不妨试试加深理解)
2.这其实是对ToolTip做的一个内容模板。规定了ToolTip的内容显示什么。不会影响外观,若要自定义ToolTip外观,再加入ControlTemplate的定义即可
4.去掉控件的边框
简单的去掉控件边控BorderBrush="{x:null}",此时最好设置背景色为透明色,否则能出现边框。