奇怪! WPF的 HeaderStyle 颜色 Binding 失效问题
MVC3层结构.
在DataGrid控件:
- C# code
View层:<my:DataGrid ......> <my:DataGrid.Columns> <my:DataGridTextColumn Header="AAA" x:Name="AAA" ... HeaderStyle="{StaticResource MyColumnHeadeStyleA}" <my:DataGridTextColumn Header="BBB" x:Name="BBB" ... HeaderStyle="{StaticResource MyColumnHeadeStyleB}" <my:DataGridTextColumn Header="BBB" x:Name="CCC" ... HeaderStyle="{StaticResource MyColumnHeadeStyleC}" </my:DataGrid.Columns>其中,MyColumnHeadeStyleA,B,C的定义: <Style x:Key="MyColumnHeadeStyleA" TargetType="my:DataGridColumnHeader"> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="Background" Value="{Binding Path=HeaderColorA}"/> </Style> <Style x:Key="MyColumnHeadeStyleB" TargetType="my:DataGridColumnHeader"> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="Background" Value="{Binding Path=HeaderColorB}"/> </Style> <Style x:Key="MyColumnHeadeStyleC" TargetType="my:DataGridColumnHeader"> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="Background" Value="{Binding Path=HeaderColorC}"/> </Style>[Model层] public string HeaderColorA { get{return headerColorA; } set{if (value != headerColorA){headerColorA= value;OnPropertyChanged("HeaderColorA");}} } private string headerColorA= "Red"; ... ...
问题:Grid表格的Head A颜色不变成红色.但是如果把MyColumnHeadeStyleA不绑定,直接这样写:
<Style x:Key="CircuitColumnHeadeStyle" TargetType="my:DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="Background" Value="Red"/>
</Style>
那么Grid表格的Head A颜色会成红色.
是不是Grid的Head不能使用Binding的方法?
[解决办法]
Background 不是 Bursh 不是 String
- C# code
public System.Windows.Media.Brush HeaderColorA{ get{return headerColorA; } set{if (value != headerColorA){headerColorA= value;OnPropertyChanged("HeaderColorA");}}}private System.Windows.Media.Brush headerColorA= Brushes.Red;
[解决办法]
如果楼主的Model是否指Datagrid每行对应的Model,如果是这样的话,肯定不能绑定,DataGridColumnHeader对应的是列,而Model对应的行,每行的Model对应于DatagridRow,DataGridColumnHeader上面是没有数据的,不能绑定
正确的绑定方法是将HeaderStyle里的Background绑定到页面的ViewModel中的HeaderColorA中,绑定代码如下:
- HTML code
<Style x:Key="MyColumnHeadeStyleA" TargetType="DataGridColumnHeader"> <Setter Property="HorizontalContentAlignment" Value="Center" /> <!--向上查找View的数据源进行绑定,也可以通过指定ElementName绑定--> <Setter Property="Background" Value="{Binding Path=HeaderColorA,RelativeSource={RelativeSource FindAncestor,AncestorType=UserControl}}"/> </Style>
[解决办法]
关于绑定颜色,string和Brush都是可以的,我上面的代码在本机测试过的,没问题
------解决方案--------------------
[解决办法]
[解决办法]
[解决办法]
你像一般的界面元素的绑定方法肯定是不行的,你先运行下我的代码,看是否符合你的需求,然后再对比你的代码什么地方写的不对
[解决办法]