Silverlight 4 - ¿Cómo configurar la propiedad de dependencia adjunta personalizada en Style?

Tengo lo siguiente en mi ResourceDictionary raíz. La Foreground = Red La pieza funciona, pero la propiedad de dependencia adjunta personalizada no se establece.

Puedo configurarlo manualmente a través del código, pero obviamente quiero evitar tener que configurarlo para cada cuadro de texto. ¿Funciona esto en Silverlight? He visto algunas publicaciones sobre cómo hacerlo en WPF y mi código me parece correcto.

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

Debo agregar que la propiedad de dependencia adjunta se define en una clase que hereda de RadContextMenu, Que es un DependencyObject (He estado leyendo y en algún lugar se sugiere que esto no puede funcionar si la propiedad adjunta está definida en dicha clase, pero esto parece extraño)

preguntado el 16 de mayo de 11 a las 18:05

1 Respuestas

Me lo imaginé. De hecho, se debió a tener la propiedad adjunta definida en la clase que tengo.

Para solucionarlo, creé una nueva clase llamada TextBoxContextMenuService y poner el código allí en su lugar.

contestado el 18 de mayo de 11 a las 20:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.