Such a function is achieved
Custom Styles Style column header in the data from the background binding
This said head styles and style data binding head
Thinking
1) When the function would first like to achieve is to edit the column header style choose to use DataGridTextColumn edit DataGridColumnHeader style
Style is very simple to layout a good end of this
2) dynamic column does not require resurfacing so we are not fully using MVVM write directly back to the loop data has been here
-
List<
string> LS =
new List<
string>();
-
-
public void addColumn()
-
{
-
LS.Add(
"表下カップ綿天竺仮縫い_37s_C_1");
-
LS.Add(
"上カップマーキしつけ_28s_C_2");
-
LS.Add(
"上下カップ接ぎ_33s_C_3");
-
LS.Add(
"上下カップ押え_62s_B_4");
-
LS.Add(
"カップ脇しつけ_14s_B_5");
-
LS.Add(
"表上カップレース端押さえ_41s_B_6");
-
-
for (
int i =
0; i < LS.Count; i++)
-
{
-
DataGridTextColumn dl =
new DataGridTextColumn();
-
dl.Header=LS[i];
-
-
dataGrid.Columns.Add(dl);
-
}
-
-
}
3) the toughest data-bound data source header if there are only two months would not have so much trouble with ControlTemplate directly from the pattern TemplateBinding binding Content and tag on it
{TemplateBinding Content}
content = Header value in the tag to be used must of course add tag's value pattern to be bound {TemplateBinding tag} in the above for
But I need four items which need to boast more TemplateBinding this binding I checked want to extend the template but little information
Workaround self-righteousness given control
First I show the lable control so I customized a lable write dependency property though a bit tedious it would be a stupid solution
1) defined Ms to obtain data and header data processing
Data 2) to obtain the definition MyProperty Ms treatment bound to the Content property lable
tag 3) the use of the control itself to distinguish that lable
Paste code:
Custom lable controls
-
public
class
LableColumn :
Label
-
{
-
public LableColumn()
-
: base()
-
{
-
}
-
-
//获得值
-
public
string Ms
-
{
-
get {
return (
string)GetValue(MsProperty); }
-
set { SetValue(MsProperty,
value); }
-
}
-
-
// Using a DependencyProperty as the backing store for ms. This enables animation, styling, binding, etc...
-
public
static
readonly DependencyProperty MsProperty =
-
DependencyProperty.Register(
"Ms",
typeof(
string),
typeof(LableColumn),
new FrameworkPropertyMetadata(
"", Onshow));
-
-
-
-
//用于绑定的值
-
public
string MyProperty
-
{
-
get {
return (
string)GetValue(MyPropertyProperty); }
-
set { SetValue(MyPropertyProperty,
value); }
-
}
-
-
// Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...
-
public
static
readonly DependencyProperty MyPropertyProperty =
-
DependencyProperty.Register(
"MyProperty",
typeof(
string),
typeof(LableColumn),
new PropertyMetadata(
""));
-
-
-
-
-
-
private static void Onshow(DependencyObject d, DependencyPropertyChangedEventArgs e)
-
{
-
LableColumn l = d
as LableColumn;
-
-
if (l.Ms !=
null && l.Ms !=
"")
-
{
-
String[] strarr = l.Ms.ToString().Split(
new
string[] {
"_" }, StringSplitOptions.None);
-
-
if (l.Tag.Equals(
"1"))
-
{
-
l.MyProperty= strarr[
3];
-
}
-
else
if (l.Tag.Equals(
"2"))
-
{
-
l.MyProperty = strarr[
0];
-
-
}
-
else
if (l.Tag.Equals(
"3"))
-
{ l.MyProperty= strarr[
2] ;
-
}
-
else
if (l.Tag.Equals(
"4"))
-
{
-
l.MyProperty= strarr[
1];
-
}
-
}
-
}
-
-
-
}
Front desk DataGridColumnHeader style
-
<Style TargetType=
"{x:Type DataGridColumnHeader}">
-
<Setter Property=
"VerticalContentAlignment" Value=
"Center"/>
-
<Setter Property=
"Template">
-
<Setter.Value>
-
<ControlTemplate TargetType=
"{x:Type DataGridColumnHeader}">
-
-
<Grid HorizontalAlignment=
"Left " Height=
"Auto " VerticalAlignment=
"Stretch " Width=
"Auto " Background=
"White " Margin=
"0 ">
-
<Grid.RowDefinitions>
-
<RowDefinition Height=
"* "/>
-
</Grid.RowDefinitions>
-
<Border BorderBrush=
"Black " BorderThickness=
"1 " HorizontalAlignment=
"Stretch " Height=
"Auto " Margin=
"0 " VerticalAlignment=
"Stretch " Grid.RowSpan=
"1 ">
-
<Grid HorizontalAlignment=
"Stretch " Height=
"Auto " Margin=
"-1,0,0,0 " VerticalAlignment=
"Stretch ">
-
<Grid.RowDefinitions>
-
<RowDefinition Height=
"20* "/>
-
<RowDefinition Height=
"20* "/>
-
<RowDefinition Height=
"20* "/>
-
<RowDefinition Height=
"20* "/>
-
</Grid.RowDefinitions>
-
<Border BorderBrush=
"Black " BorderThickness=
"1,1,0,1 " HorizontalAlignment=
"Stretch " Height=
"Auto " Margin=
"0 " VerticalAlignment=
"Stretch " Width=
"Auto " Grid.Row=
"1 ">
-
<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 "/>
-
</Border>
-
<Border BorderBrush=
"Black " BorderThickness=
"1,1,0,1 " HorizontalAlignment=
"Stretch " Height=
"Auto " Margin=
"0 " VerticalAlignment=
"Stretch " Width=
"Auto ">
-
<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 "/>
-
</Border>
-
<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"/>
-
-
<Border BorderBrush=
"Black " BorderThickness=
"1,1,0,1 " HorizontalAlignment=
"Stretch " Height=
"Auto " Margin=
"0,0,0,0 " VerticalAlignment=
"Stretch " Width=
"Auto " Grid.Row=
"2 ">
-
<TextBlock TextWrapping =
"Wrap " Background=
"#FFF9F9F9 " Text=
"{Binding Path=Content,ElementName=lText}" HorizontalAlignment=
"Stretch " Height=
"35 " Margin=
"0 " VerticalAlignment=
"Stretch " Width=
"82 "/>
-
-
</Border>
-
<Border BorderBrush=
"Black " BorderThickness=
"1,1,0,1 " HorizontalAlignment=
"Stretch " Height=
"Auto " Margin=
"0 " VerticalAlignment=
"Stretch " Width=
"Auto " Grid.Row=
"3 ">
-
<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 "/>
-
</Border>
-
</Grid>
-
</Border>
-
</Grid>
-
-
</ControlTemplate>
-
</Setter.Value>
-
</Setter>
-
</Style>
Data binding involves two kinds of skills here
Is itself a binding property
{Binding MyProperty, RelativeSource={RelativeSource self}}
The second is the binding properties of other controls
{Binding Path=Content,ElementName=lText}
There must be a better way to achieve this hope was a message to share learning