Не удается найти управляющий FrameworkElement - PullRequest
1 голос
/ 13 октября 2019

Я прочитал много ответов об этом типе ошибки, но ничего не могу исправить мою проблему.

моя программа работает с этой ошибкой, но я бы знал, почему и как я могу это исправить? или его известная ошибка? Спасибо за вашу помощь

ошибка для 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}");
        }
    }
}

Внешний вид ViewModel:

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);
            }
        }

    }
}

1 Ответ

1 голос
/ 14 октября 2019

Это может вам помочь.

Спам с привязкой к таблице данных Окно вывода с ошибкой: не удается найти управляющий 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>

Надеюсь, это полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...