我需要将一些东西绑定到我的 VisualTree 中一个元素的子级。
在用户控件中:
<StackPanel>
<DataGrid x:Name="dataGrid" />
<Control Tag="{Binding ElementName=dataGrid}" />
</StackPanel>
在 DataGrid 的模板中:
<Template TargetType=DataGrid>
......
<Control x:Name="FindMe" />
......
</Template>
我想做的是遍历 DataGrid 的 VisualTree,为此我创建了一个自定义标记扩展:
public class TemplatePartBinding : MarkupExtension
{
public override object ProvideValue(IServiceProvider serviceProvider)
{
Binding binding = new Binding();
binding.ElementName = ElementName;
// HOW DO I GET THE SOURCE OBJECT FROM THE BINDING ?
DataGrid dataGrid = // Extract the DataGrid from the binding.
Control _findMe = VisualTreeHelperExtentions.FindVisualChild<Control>(dataGrid,"FindMe");
binding.Target = _findMe;
binding.Path = new PropertyPath("Tag");
return binding;
}
[ConstructorArgument("ElementName")]
public string ElementName
{
get;
set;
}
[ConstructorArgument("TemplatePartName")]
public string TemplatePartName
{
get;
set;
}
}
在 ProvideValue 中,在将绑定的 ElementName 值命名为 name 之后,我不想找到 DataGrid(绑定的源对象),
如何从刚刚创建的绑定中提取 DependencyObject(我的 DataGrid)?