2016-03-15 1 views
1

Любой, пожалуйста, попробуйте этот сценарий и поделитесь идеей, чтобы решить проблему, с которой сталкивается.свойство пытается получить доступ к значению из System.Windows.FrameworkElement

Сценарий:

В моем классе (унаследованном от Control) только я объявил свойство FlowDirection, которое является типом BulletGraphFlowDirection (Enum (вперед, назад)).

Я использовал новое ключевое слово для FlowDirection для разрешения предупреждения, которое я получаю.

Warning 'DirectionSfBulletGraph1.MyClass.FlowDirection' скрывает унаследованный элемент 'System.Windows.FrameworkElement.FlowDirection'. Используйте новое ключевое слово, если было предназначено скрытие.

public enum BulletGraphFlowDirection 
    { 
     Forward, 
     Backward 
    } 
public class MyClass : Control 
{ 

    public new BulletGraphFlowDirection FlowDirection 
    { 
     get { return (BulletGraphFlowDirection)GetValue(FlowDirectionProperty); } 
     set { SetValue(FlowDirectionProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for FlowDirection. This enables animation, styling, binding, etc... 
    public new static readonly DependencyProperty FlowDirectionProperty = 
     DependencyProperty.Register("FlowDirection", typeof(BulletGraphFlowDirection), typeof(MyClass), new PropertyMetadata(BulletGraphFlowDirection.Backward)); 
} 

Издание:

Когда я пытаюсь установить значение FlowDirection недвижимости в Xaml странице это просто выброшены сообщение об ошибке»Обратное не является допустимым значением для FlowDirection».

<local:MyClass x:Name="myClass" FlowDirection="Backward"/> 

Мое предположение - свойство FlowDirection пытается получить доступ к значению из System.Windows.FrameworkElement. FlowDirection '(Enum (LeftToRight, RightToLeft))

Не получается получить ошибку, когда значение свойства задано с помощью кода позади.

myClass.FlowDirection = BulletGraphFlowDirection.Backward; 

Почему возникает проблема при объявлении со страницы Xaml. Очень сложно найти причину этого. Пожалуйста, поделитесь мной идеей, чтобы решить.

С уважением,

Jeyasri M

+1

Почему бы просто не назвать свойство чем-то еще? Например, BulletFlowDirection – Karmacon

+0

Спасибо за ваш ответ.Но я сомневаюсь, когда свойство задано в коде за свойством FlowDirection, доступ к значению из его производного класса, а не из базы (Control), если проблема заключается в использовании нового ключевого слова в DP, тогда сценарий не должен работать, когда он установлен в коде позади .Если я использовал новое ключевое слово, то свойство FlowDirection не унаследовано от базового класса (Control), но все же оно пытается получить доступ к значению свойства базового класса только из объявления XAML, а не из кода позади. –

+0

FYI. Я пробовал один и тот же сценарий в проекте WinRT, потому что не имею проблем. Но не знаю причины проблемы с платформой WPF. –

ответ

-1

Ну, как вы сказали, он пытается использовать значение исходного FlowDirection.

Причина в том, что скрытие! = Переопределение. Поэтому, если ваш элемент хранится в коллекции типа Control и FlowDirection, вызывается на его элементах, тогда будет вызываться Control.FlowDirection, а не MyClass.FlowDirection. Вероятно, ваш контроль обрабатывается как Control, а не MyClass, когда он пытается разобрать xaml и инициализировать представление.

Когда вы устанавливаете значение в кодировке, вы явно указываете, что хотите установить MyClass.FlowDirection с помощью типизированной переменной MyClass.

Если бы экземпляр этой переменной как:

Control myClass = new MyClass(); 

Тогда

myClass.FlowDirection = BulletGraphFlowDirection.Backward; 

не будет работать либо на мой взгляд.

Как предложил Karmacon, изменение названия решит проблему. (Я думаю, это заставляет парсер xaml обрабатывать ваш контроль как MyClass, а не Control)

Смежные вопросы