我在控件上有一个数据模板属性,我想包装一下以改变行为。
该模板属性应公开给控件的用户(开发人员),但我想更改数据上下文,因为我想传递给用户的数据上下文位于可视树中的某个位置,我不希望用户每次都在那里导航。因此,最后,BaseControl
控件包装中的XAML
<BaseControl SomeTemplate="{Binding MyTemplate}" />
控制包装中的代码后面
public static readonly DependencyProperty MyTemplateProperty = DependencyProperty.Register(
"MyTemplate", typeof(DataTemplate), typeof(BaseControl), new PropertyMetadata(default(DataTemplate)));
public DataTemplate MyTemplate { get { return (DataTemplate)GetValue(MyTemplateProperty ); } set { SetValue(MyTemplateProperty , value); } }
控件包装的使用
<BaseControl>
<BaseControl.MyTemplateProperty>
<!-- desired -->
<Label Content="{Binding Name}" />
<!-- actual -->
<!-- the data context of "OtherProperty" should be exposed to the user -->
<Label Content="{Binding DataContext.SomeProperty.OtherProperty.Name, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=SomeType}}" />
</BaseControl.MyTemplateProperty>
</BaseControl>