WPF,XAML,FindAncestor绑定DataTemplate / ControlTemplate层次结构

时间:2018-08-13 11:25:38

标签: wpf xaml

我们有以下XAML:

        <DataTemplate x:Key="PictureMediaEditorInformationTemplate" DataType="mediaEditorInformation:PictureMediaEditorInformation">
        <dxlc:LayoutGroup Orientation="Horizontal">
            <dxlc:LayoutItem Label="{Binding LabelContent}">
                <dxlc:LayoutGroup Orientation="Vertical">
                    <dxlc:LayoutItem Label="{Binding LabelTitle}" LabelPosition="Left">
                        <dxe:TextEdit EditValue="{Binding Title, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                    </dxlc:LayoutItem>
                    <dxlc:LayoutItem>
                        <dxe:ImageEdit ShowLoadDialogOnClickMode="Empty" ShowBorder="true" AllowDrop="True" Drop="PictureEditor_OnDrop"
                    Source="{Binding VisibleImage, Converter={StaticResource LexImageToImageConverter}, 
                    Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="320" Height="320" ShowMenu="true">
                            <dxmvvm:Interaction.Behaviors>
                                <dxmvvm:EventToCommand EventName="MouseDoubleClick" Command="{Binding ViewPictureCommand}"/>
                            </dxmvvm:Interaction.Behaviors>
                            <dxe:ImageEdit.MenuTemplate>
                                <ControlTemplate>
                                    <StackPanel Orientation="Horizontal">
                                        <dxe:ImageEditClearToolButton ImageSource="{Binding ButtonImage, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=dxlc:LayoutGroup}}"/>

我们无法找出正确的方法来为ImageSource绑定指定DataTemplate数据上下文。由于DataTemplate是使用以下代码在实例化的资源,因此可能会使情况变得复杂:

var template = (DataTemplate) lg.FindResource(item.DataTemplateName);

            var uiElement = template.LoadContent() as FrameworkElement;

我们已经尝试了各种方法,但到目前为止都没有成功。我曾希望设置uiElement.Name可以与ElementName结合使用,但是它可能会失败,因为它是从ControlTemplate过渡到DataTemplate的。

NB:在实际代码中,该属性不称为“ Wibble”:)

1 个答案:

答案 0 :(得分:0)

解决方案是在绑定中指定路径:

<dxe:ImageEditClearToolButton ImageSource="{Binding Path=DataContext.Wibble}"