Я не вижу свойства зависимостей только для чтения в моем XAML - PullRequest
1 голос
/ 23 января 2011

У меня есть пользовательский элемент управления с этим тест-кодом. Затем я помещаю свой элемент управления на панель и вижу его в дизайнере предварительного просмотра. Затем я иду туда, где элемент управления определен в xaml и начинаю вводить IsMouseOver ... но я не могу найти этот Dep. Недвижимость, ПОЧЕМУ? Я не хочу предлагать SETTTER, но я хочу предложить пользователю моего элемента управления привязку к элементу управления с помощью GETTER.

Что я не прав?

// Register the private key to set the value
private static readonly DependencyPropertyKey IsMouseOverTestPropertyKey =
              DependencyProperty.RegisterReadOnly("IsMouseOverTest",
              typeof(bool), typeof(ElementTextBox),
              new FrameworkPropertyMetadata(false));

// Register the public property to get the value
public static readonly DependencyProperty IsMouseOverTestProperty =
              IsMouseOverTestPropertyKey.DependencyProperty;

// .NET Property wrapper
public bool IsMouseOverTest
{
    get { return (bool)GetValue(IsMouseOverTestProperty); }
    private set { SetValue(IsMouseOverTestPropertyKey, value); }
}

Ответы [ 2 ]

3 голосов
/ 23 января 2011

Вы говорите, что не хотите, чтобы пользователи могли устанавливать это свойство, например, так:

<ElementTextBox IsMouseOverTest="true" .../>

И как я понял, это именно то, что вы получаете ... Выне видите это свойство в intellisense, потому что вы не можете установить это свойство.

Но вы хотите, чтобы пользователи могли связываться с вашим имуществом, используя getter, например, так:

<ElementTextBox x:Name="MyTextBox" />
<Popup IsOpen="{Binding ElementName=MyTextBox, Path=IsMouseOverTest}"/>

Если это то, что вы хотите, то я не вижу проблемы.Вы можете сделать это.

Я вижу проблему, только если вы хотите что-то вроде этого:

<ElementTextBox IsMouseOverTest="{Binding SomeBooleanProperty}" .../>

И это не будет работать, потому что для этого требуется установщик.

Возможно, вы захотите установить эту привязку, используя режим OneWayToSource, например:

<ElementTextBox IsMouseOverTest="{Binding SomeBooleanProperty, Mode=OneWayToSource}" .../>

Но все равно он не будет работать, хотя логически и должен.Это известное ограничение.См https://connect.microsoft.com/WPF/feedback/details/523865/read-only-dependency-properties-does-not-support-onewaytosource-bindings?wa=wsignin1.0

0 голосов
/ 23 января 2011

Вы перестроили решение?Иногда в среде IDE предыдущая версия хранится в кэше.

Кроме того: в xaml, где объявлен элемент управления, все, что вы можете сделать, это установить свойство SET, а поскольку вы не добавили установщик, это невозможно.Попробуйте связать его в другом объявлении элемента управления.

...