首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

奇怪! WPF的 HeaderStyle 颜色 Binding 失效有关问题

2012-09-29 
奇怪! WPF的 HeaderStyle 颜色 Binding 失效问题MVC3层结构.在DataGrid控件:C# codeView层:my:DataGrid .

奇怪! 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都是可以的,我上面的代码在本机测试过的,没问题
------解决方案--------------------


探讨
"{Binding Path=HeaderColorA,RelativeSource={RelativeSource FindAncestor,AncestorType=UserControl}}"/>
着句话的意思是?
正确的绑定方法是将HeaderStyle里的Background绑定到页面的ViewModel中的HeaderColorA中,绑定代码如下:

[解决办法]
探讨
引用:

引用:
"{Binding Path=HeaderColorA,RelativeSource={RelativeSource FindAncestor,AncestorType=UserControl}}"/>
着句话的意思是?
正确的绑定方法是将HeaderStyle里的Background绑定到页面的Vi……

[解决办法]
探讨
引用:

我的Model的意思是ViewModel。很奇怪的原因是XMAL中其他控件的绑定都是有效的。比如TextBox的内容等等。(在ViewModel层设置值。)但是就是这个DataGrid的Head颜色动态设置绑定失效。。

[解决办法]
你像一般的界面元素的绑定方法肯定是不行的,你先运行下我的代码,看是否符合你的需求,然后再对比你的代码什么地方写的不对
[解决办法]
探讨
但是DataContext中查看到HeaderColorA的设置颜色是"Red",可是View是默认的"Gainsboro".是不是

C# code
Value="{Binding DataContext.HeaderColorB,ElementName=layoutroot}"


Value变成""Red"",然后无效了?

热点排行