Silverlight 4 - Как установить свойство пользовательской вложенной зависимости в стиле? - PullRequest
1 голос
/ 16 мая 2011

У меня есть следующее в моем корневом ResourceDictionary. Часть Foreground = Red работает, но настраиваемое свойство зависимостей не устанавливается.

Я могу установить его вручную с помощью кода, но я, очевидно, хочу избежать необходимости устанавливать его для каждого текстового поля. Это работает в Silverlight? Я видел несколько постов о том, как делать это в WPF, и мой код выглядит правильно (для меня).

<Style TargetType="TextBox">
    <Setter Property="controls:TextBoxContextMenu.HasContextMenu" Value="True" />
    <Setter Property="Foreground" Value="Red" />
</Style>


/// <summary>
    /// Gets the value of the HasContextMenu attached property for a specified TextBox.
    /// </summary>
    /// <param name="element">The TextBox from which the property value is read.</param>
    /// <returns>The HasContextMenu property value for the TextBox.</returns>
    public static bool GetHasContextMenu(TextBox element)
    {
        if (element == null)
        {
            throw new ArgumentNullException("element");
        }
        return (bool)element.GetValue(HasContextMenuProperty);
    }

    /// <summary>
    /// Sets the value of the HasContextMenu attached property to a specified TextBox.
    /// </summary>
    /// <param name="element">The TextBox to which the attached property is written.</param>
    /// <param name="value">The needed HasContextMenu value.</param>
    public static void SetHasContextMenu(TextBox element, bool value)
    {
        if (element == null)
        {
            throw new ArgumentNullException("element");
        }
        element.SetValue(HasContextMenuProperty, value);
    }

    /// <summary>
    /// Identifies the HasContextMenu dependency property.
    /// </summary>
    public static readonly DependencyProperty HasContextMenuProperty =
        DependencyProperty.RegisterAttached(
            "HasContextMenu",
            typeof(bool),
            typeof(TextBox),
            new PropertyMetadata(false, OnHasContextMenuPropertyChanged));

    /// <summary>
    /// HasContextMenuProperty property changed handler.
    /// </summary>
    /// <param name="d">TextBoxContextMenu that changed its HasContextMenu.</param>
    /// <param name="e">Event arguments.</param>
    private static void OnHasContextMenuPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{ 
    // code
}

Я должен добавить, что свойство присоединенной зависимости определено в классе, который наследуется от RadContextMenu, который является DependencyObject (я читал, и где-то предполагается, что это не может работать, если присоединенное свойство определяется в таком классе, но это кажется странным)

1 Ответ

0 голосов
/ 18 мая 2011

Я понял это.Это действительно было связано с определением присоединенного свойства в моем классе.

Чтобы исправить это, я создал новый класс с именем TextBoxContextMenuService и вместо него поместил туда код.

...