独善所与の列ヘッダーのスタイルとバインドデータを達成するためにWPF(DataGridColumnHeader)

オリジナル: WPF(DataGridColumnHeaderは)独善与えられた列ヘッダーのスタイルとバインドデータを達成するために

 

このような機能が実現されます 

バックグラウンド結合からのデータにカスタムスタイルスタイル列ヘッダー 

これは言っヘッドスタイルとスタイルデータバインディングヘッド

思考

1)関数は、最初に達成したいことは、列ヘッダーのスタイルを使用することを選択した編集にあるだろうというときDataGridTextColumnの編集DataGridColumnHeaderのスタイルを

スタイルは、この良い終わりをレイアウトすることは非常に簡単です

2)動的な列は、我々は完全にここにいたループデータに直接戻ってMVVMの書き込みを使用していないので、再舗装する必要はありません。


  
  
  1. List< string> LS = new List< string>();
  2. public void addColumn()
  3. {
  4. LS.Add( "表下カップ綿天竺仮縫い_37s_C_1");
  5. LS.Add( "上カップマーキしつけ_28s_C_2");
  6. LS.Add( "上下カップ接ぎ_33s_C_3");
  7. LS.Add( "上下カップ押え_62s_B_4");
  8. LS.Add( "カップ脇しつけ_14s_B_5");
  9. LS.Add( "表上カップレース端押さえ_41s_B_6");
  10. for ( int i = 0; i < LS.Count; i++)
  11. {
  12. DataGridTextColumn dl = new DataGridTextColumn();
  13. dl.Header=LS[i];
  14. dataGrid.Columns.Add(dl);
  15. }
  16. }

3)過酷なデータ・バインドされたデータソースのヘッダーのみ2ヶ月がある場合は、その上にパターンTemplateBindingの結合コンテンツやタグから直接のControlTemplateを持つので、多くの問題を持っていないでしょう

{TemplateBindingのコンテンツ}

タグ内のコンテンツ=ヘッダ値がコース追加タグの値パターンのマストを使用することについて上記で{TemplateBindingのタグ}結合します

しかし、私はより多くの、これは私はテンプレートが、少し情報を拡張したいを確認バインディングTemplateBindingの自慢に必要な4つの項目を必要とします 

回避策独善与えられた制御

それ退屈なビットは愚かな解決策になるけれども、私はlable書き込み依存関係プロパティをカスタマイズしたように、最初に私がlableコントロールを表示します

1)データ及びヘッダデータ処理を得るために、MSを定義 

Contentプロパティのlableにバインド定義MYPROPERTYのMS治療を得るために、データ2)

タグ3)そのlableを区別するためのコントロール自体の使用

 コードを貼り付けます。

カスタムコントロールlable


  
  
  1. public class LableColumn : Label
  2. {
  3. public LableColumn()
  4. : base()
  5. {
  6. }
  7. //获得值
  8. public string Ms
  9. {
  10. get { return ( string)GetValue(MsProperty); }
  11. set { SetValue(MsProperty, value); }
  12. }
  13. // Using a DependencyProperty as the backing store for ms. This enables animation, styling, binding, etc...
  14. public static readonly DependencyProperty MsProperty =
  15. DependencyProperty.Register( "Ms", typeof( string), typeof(LableColumn), new FrameworkPropertyMetadata( "", Onshow));
  16. //用于绑定的值
  17. public string MyProperty
  18. {
  19. get { return ( string)GetValue(MyPropertyProperty); }
  20. set { SetValue(MyPropertyProperty, value); }
  21. }
  22. // Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...
  23. public static readonly DependencyProperty MyPropertyProperty =
  24. DependencyProperty.Register( "MyProperty", typeof( string), typeof(LableColumn), new PropertyMetadata( ""));
  25. private static void Onshow(DependencyObject d, DependencyPropertyChangedEventArgs e)
  26. {
  27. LableColumn l = d as LableColumn;
  28. if (l.Ms != null && l.Ms != "")
  29. {
  30. String[] strarr = l.Ms.ToString().Split( new string[] { "_" }, StringSplitOptions.None);
  31. if (l.Tag.Equals( "1"))
  32. {
  33. l.MyProperty= strarr[ 3];
  34. }
  35. else if (l.Tag.Equals( "2"))
  36. {
  37. l.MyProperty = strarr[ 0];
  38. }
  39. else if (l.Tag.Equals( "3"))
  40. { l.MyProperty= strarr[ 2] ;
  41. }
  42. else if (l.Tag.Equals( "4"))
  43. {
  44. l.MyProperty= strarr[ 1];
  45. }
  46. }
  47. }
  48. }

フロントデスクDataGridColumnHeaderのスタイル


  
  
  1. <Style TargetType= "{x:Type DataGridColumnHeader}">
  2. <Setter Property= "VerticalContentAlignment" Value= "Center"/>
  3. <Setter Property= "Template">
  4. <Setter.Value>
  5. <ControlTemplate TargetType= "{x:Type DataGridColumnHeader}">
  6. <Grid HorizontalAlignment= "Left " Height= "Auto " VerticalAlignment= "Stretch " Width= "Auto " Background= "White " Margin= "0 ">
  7. <Grid.RowDefinitions>
  8. <RowDefinition Height= "* "/>
  9. </Grid.RowDefinitions>
  10. <Border BorderBrush= "Black " BorderThickness= "1 " HorizontalAlignment= "Stretch " Height= "Auto " Margin= "0 " VerticalAlignment= "Stretch " Grid.RowSpan= "1 ">
  11. <Grid HorizontalAlignment= "Stretch " Height= "Auto " Margin= "-1,0,0,0 " VerticalAlignment= "Stretch ">
  12. <Grid.RowDefinitions>
  13. <RowDefinition Height= "20* "/>
  14. <RowDefinition Height= "20* "/>
  15. <RowDefinition Height= "20* "/>
  16. <RowDefinition Height= "20* "/>
  17. </Grid.RowDefinitions>
  18. <Border BorderBrush= "Black " BorderThickness= "1,1,0,1 " HorizontalAlignment= "Stretch " Height= "Auto " Margin= "0 " VerticalAlignment= "Stretch " Width= "Auto " Grid.Row= "1 ">
  19. <local:LableColumn Tag= "3" Content= "{Binding RelativeSource={RelativeSource self},Path=MyProperty}" Ms= "{TemplateBinding Content}" Background= "#FFF9F9F9 " HorizontalAlignment= "Stretch " Height= "25 " Margin= "0 " VerticalAlignment= "Stretch " Width= "82 "/>
  20. </Border>
  21. <Border BorderBrush= "Black " BorderThickness= "1,1,0,1 " HorizontalAlignment= "Stretch " Height= "Auto " Margin= "0 " VerticalAlignment= "Stretch " Width= "Auto ">
  22. <local:LableColumn Tag= "1" Content= "{Binding MyProperty, RelativeSource={RelativeSource self}}" Ms= "{TemplateBinding Content}" Background= "#FFF9F9F9 " HorizontalAlignment= "Stretch " Height= "25 " Margin= "0 " VerticalAlignment= "Stretch " Width= "82 "/>
  23. </Border>
  24. <local:LableColumn x:Name= "lText" Tag= "2" Content= "{Binding MyProperty, RelativeSource={RelativeSource self}}" Ms= "{TemplateBinding Content}" Background= "#FFF9F9F9 " HorizontalAlignment= "Stretch " Height= "35 " Margin= "0 " VerticalAlignment= "Stretch " Width= "82 " Visibility= "Collapsed"/>
  25. <Border BorderBrush= "Black " BorderThickness= "1,1,0,1 " HorizontalAlignment= "Stretch " Height= "Auto " Margin= "0,0,0,0 " VerticalAlignment= "Stretch " Width= "Auto " Grid.Row= "2 ">
  26. <TextBlock TextWrapping = "Wrap " Background= "#FFF9F9F9 " Text= "{Binding Path=Content,ElementName=lText}" HorizontalAlignment= "Stretch " Height= "35 " Margin= "0 " VerticalAlignment= "Stretch " Width= "82 "/>
  27. </Border>
  28. <Border BorderBrush= "Black " BorderThickness= "1,1,0,1 " HorizontalAlignment= "Stretch " Height= "Auto " Margin= "0 " VerticalAlignment= "Stretch " Width= "Auto " Grid.Row= "3 ">
  29. <local:LableColumn Tag= "4" Content= "{Binding MyProperty, RelativeSource={RelativeSource self}}" Ms= "{TemplateBinding Content}" Background= "#FFF9F9F9 " HorizontalAlignment= "Stretch " Height= "35 " Margin= "0 " VerticalAlignment= "Stretch " Width= "82 "/>
  30. </Border>
  31. </Grid>
  32. </Border>
  33. </Grid>
  34. </ControlTemplate>
  35. </Setter.Value>
  36. </Setter>
  37. </Style>

 

データバインディングは、ここではスキルの2種類を含み、

結合特性そのものであります  

{Binding MyProperty, RelativeSource={RelativeSource self}}
 
 

第二は、他のコントロールの結合特性であります

{Binding Path=Content,ElementName=lText}
 
 

この希望は、共有学習へのメッセージだった達成するためのより良い方法があるに違いありません

 

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/12075390.html