【问题标题】:Cannot find governing FrameworkElement找不到管理 FrameworkElement
【发布时间】:2020-02-10 11:32:03
【问题描述】:

我已经阅读了很多关于此类错误的答案,但没有什么可以解决我的问题。

我的程序运行时出现此错误,但我知道为什么以及如何解决?或其已知的错误?感谢您的帮助

Appearance.Offset.X 错误:

System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. 
BindingExpression:Path=Appearance.Offset.X; DataItem=null; target element is 'TranslateTransform' (HashCode=62775401); target property is 'X' (type 'Double')

Appearance.Offset.Y 出现同样的错误


我的 xaml 文件

<UserControl 
                            :
                            :
    mc:Ignorable="d" d:DesignHeight="150" d:DesignWidth="70"
    x:Name="usercontrol"  ToolTip="{Binding ToolTip}"
    VerticalAlignment = "Top" HorizontalAlignment = "Left" ClipToBounds="True"
    cal:Message.Attach="[Event MouseEnter] = [Action MouseEnterInUC($eventArgs)];
                        [Event MouseLeftButtonDown] = [Action MouseLeftButtonDownOnUC($source, $mousepoint, $eventArgs)];
                        [Event MouseLeftButtonUp] = [Action MouseLeftButtonUp()]">

    <Grid x:Name="Switch"  Width="{Binding Path=Layout.Width}" Height="{Binding Path=Layout.Height}" >
        <Image x:Name="Pushed" Source="{Binding Appearance.PushedImage, Mode=TwoWay}"
               HorizontalAlignment="Center" VerticalAlignment="Center" >
                                :
                                :
        </Image>

        <Image x:Name="Normal" Source="{Binding Appearance.Image}"
               HorizontalAlignment="Center" VerticalAlignment="Center" >
                                :
                                :
        </Image>
        <TextBlock Text="{Binding Appearance.GlyphText}" Foreground="{Binding Appearance.TextColor, Converter={StaticResource MyconverterColorToSolidColorBrush}}"
                   HorizontalAlignment="{Binding Appearance.SelectedHAlignType}" VerticalAlignment="{Binding Appearance.SelectedVAlignType}" 
                   >

            <TextBlock.Style>
                <Style TargetType="TextBlock">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Appearance.IndexImage}" Value="1">
                            <Setter Property="RenderTransform" >
                                <Setter.Value>
Error here----->                    <TranslateTransform X="{Binding Appearance.Offset.X}" Y="{Binding Appearance.Offset.Y}"  />
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBlock.Style>
        </TextBlock>

        <Path StrokeThickness="{Binding Appearance.GlyphThickness}" Stroke="{Binding Appearance.GlyphColor, Converter={StaticResource MyconverterColorToSolidColorBrush}}" >
                            :
                            :
        </Path>
    </Grid>
</UserControl>

ViewModel 文件:

namespace Cockpit.Core.Plugins.Plugins
{
    [Identity(GroupName = "PushButton", Name ="", Type = typeof(PushButton_ViewModel))]
    [DataContract(Name = "Cockpit.Core.Plugins.Plugins.PushButton_ViewModel")]
    public class PushButton_ViewModel : PropertyChangedBase, IPluginModel 
    {
        private readonly IEventAggregator eventAggregator;

        [DataMember] public PushButtonAppearanceViewModel Appearance { get; private set; }

        public PushButton_ViewModel(IEventAggregator eventAggregator, params object[] settings)
        {
            Appearance = new PushButtonAppearanceViewModel(settings);

            NameUC = (string)settings[2];

            this.eventAggregator = eventAggregator;
            System.Diagnostics.Debug.WriteLine($"entree push {NameUC} {this}");
        }
    }
}

外观视图模型:

namespace Cockpit.Core.Plugins.Plugins.Properties
{
    [DataContract]
    public class PushButtonAppearanceViewModel : PropertyChangedBase, IPluginProperty

    {
        public string NameUC { get; set; }
        public PushButtonAppearanceViewModel(params object[] settings)
        {
                        :
                        :

            Name = "Appearance";
        }


        public string Name { get; set; }



        private TextFormat textformat;
        public TextFormat TextFormat
        {
            get => textformat;

            set
            {
                textformat = value;
                NotifyOfPropertyChange(() => TextFormat);
            }
        }

        private string textPushOffset;
        public string TextPushOffset
        {
            get => textPushOffset;

            set
            {
                textPushOffset = value;
                var a = value.Split(',').Select(i => Convert.ToInt32(i)).ToArray();
                Offset = new Point(a[0], a[1]);
                NotifyOfPropertyChange(() => TextPushOffset);
            }
        }

        private Point offset;
        public Point Offset
        {
            get => offset;

            set
            {
                offset = value;
                NotifyOfPropertyChange(() => Offset);
            }
        }

    }
}

【问题讨论】:

    标签: c# wpf xaml binding


    【解决方案1】:

    这可能会对你有所帮助。

    Datatemplate binding spam Output window with error: Cannot find governing FrameworkElemen

    公认的答案是转换不存在于可视树或逻辑树中,因此它无法继承完成绑定所需的数据上下文。

    推荐的解决方案是将转换定义为 TextBlock 的资源:

    <TextBlock ...>
        <TextBlock.Resources>
            <TranslateTransform x:Key="MyTransform" X="{Binding Appearance.Offset.X}" Y="{Binding Appearance.Offset.Y}"  />
        </TextBlock.Resources>
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Appearance.IndexImage}" Value="1">
                        <Setter Property="RenderTransform" >
                            <Setter.Value>
                                <StaticResource ResourceKey="MyTransform" />
                            </Setter.Value>
                        </Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
    

    我希望这会有所帮助。

    【讨论】:

    • 无赖!好的,我看看能不能找出问题的根源。
    • 我将在这个周末进行测试...我现在无法访问我的应用...感谢您的帮助
    • 如果真的不能继承DataContext,那你怎么还能写{Binding Appearance.Offset.X}而且还能用呢?
    • @corentin,对于这个项目,我使用的是 caliburn 和 ninject,所以每个视图都链接到你可以在我的项目中看到的视图模型 github.com/Frenchy62620/Cockpit-master
    猜你喜欢
    • 2013-08-17
    • 2013-03-24
    • 2014-02-03
    • 2021-08-22
    • 2011-12-17
    • 2016-06-02
    • 2013-08-22
    • 1970-01-01
    相关资源
    最近更新 更多