在后台动态加载列,列的头部使用模板
但是列的左右拖动失效了,怎么在该基础上实现 列的左右拖动呀~~~
应该是鼠标点不到你的列 所以拖动效果没了 你试试该该模版 我以前也遇到过 也是改模版解决的
我改了模板,可以进行拖拉了,但是遇到一个问题,我怎么在模板中将该列的Hearder的值赋到模板中的一个Label中去呢???
@小_妮_子: 你试试 给元素起个Name 然后 用别的元素 绑定 这个name
用{Binding property,ElementName=name}
@kiba518: 我的这个列是动态的,是在后台动态创建的~~
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("A1", "number1");
dic.Add("A2", "number2");
dic.Add("A3", "number3");
foreach (var item in dic.Keys)
{
DataGridTextColumn coll = new DataGridTextColumn();
coll.Binding = new Binding(dic[item]);
coll.HeaderTemplate = (DataTemplate)Resources["hdic"];
coll.Header = item;
this.myGrid.Columns.Add(coll);
}
@kiba518:
我就是想把创建的列的Hearder的值绑定到模板中的lable中去~~
@小_妮_子: 使用了 HeaderTemplate Header 就无效了
实在不行 用最傻的方法 定义个公共变量 然后前台穿出去绑定
{Binding Path= 属性 ,RelativeSource={RelativeSource AncestorType={x:Type Page}}}
@kiba518:
这样弄??? 不是很清楚,
另外,<TextBox Text="{Binding ElementName=c1,Path=Header}"></TextBox>这句是可以用的,但是要给列设置name属性,
@小_妮_子: 差不多, 但穿出去找变量,就不用使用ElementName了。就这几种模式,试试就可以了
@kiba518:
用公共变量那个怎么弄呀?? 整不懂~~~
@小_妮_子:
你正常 不是要给datagrid绑定一个集合变量嘛,在页面生成的时候就会去那个页面找那个变量,
正常情况,你只能使用这个绑定变量下的内容,但还可以穿出去,去那个页面找别的变量。类似这样定义,就穿出去了。
{Binding Path= 属性 ,RelativeSource={RelativeSource AncestorType={x:Type Page}}}
不建议直接修改它的ControlTemplate,因为有些特性,比如左右拖动是需要默认的ControlTemplate配合的,DataGridColumn的Header是一个Object类型,可以直接设置Header里的内容(不只是文字),如果你认为默认的ControlTemplate和你的要求不一致,那么可以从Blend中复制默认的模板代码进行修改,自行创建可能会导致一些不能预料到的行为。另外,提问的布局代码冗余了(如果我没有理解错误的话)。
我把模板改了,现在可以进行拖动了,但是有个问题,我不知道怎么把Hear的值赋到模板中去~~