UIElement.Focusable Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Obtiene o establece un valor que indica si el elemento puede recibir el foco. Se trata de una propiedad de dependencia.
public:
property bool Focusable { bool get(); void set(bool value); };
public bool Focusable { get; set; }
member this.Focusable : bool with get, set
Public Property Focusable As Boolean
Valor de propiedad
true
si el elemento es centrable; de lo contrario, false
. El valor predeterminado es false
.
Implementaciones
Ejemplos
En el código de ejemplo siguiente se muestra una plantilla de control para un control personalizado determinado, que establece Focusablefalse
en uno de los elementos de la plantilla.
<Window.Resources>
<Style x:Key="TextBoxNoScrollViewer" TargetType="{x:Type TextBoxBase}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBoxBase}">
<Border
CornerRadius="2"
Background="{TemplateBinding Background}"
BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{TemplateBinding BorderBrush}"
>
<!--
The control template for a TextBox or RichTextBox must
include an element tagged as the content host. An element is
tagged as the content host element when it has the special name
PART_ContentHost. The content host element must be a ScrollViewer,
or an element that derives from Decorator.
-->
<AdornerDecorator
x:Name="PART_ContentHost"
Focusable="False"
/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
Comentarios
Solo el elemento centrado recibe la entrada del teclado.
Focusable es el descriptor de acceso de propiedad de Microsoft .NET para lo que en realidad es una propiedad de dependencia. Esta propiedad de dependencia determinada suele tener su aparente valor "predeterminado" establecido de forma diferente en las clases de elementos derivados, especialmente en los controles. Esto suele ocurrir de una de estas dos maneras:
Una clase derivada determinada hereda la propiedad de dependencia, pero esa clase derivada invalida los metadatos de la propiedad de dependencia y cambia el valor predeterminado de la propiedad.
Un estilo o plantilla se aplica a un elemento , que establece ese valor de propiedad de dependencia de forma diferente.
Por ejemplo, el "valor predeterminado" aparente de Focusable para un control de Button será true
, aunque Button hereda Focusable como una propiedad de Common Language Runtime (CLR) directamente desde UIElement. Esto se debe a que el valor de metadatos aplicado para la propiedad de dependencia Focusable se invalidó dentro del constructor estático de la clase base Control, que se encuentra entre Button y UIElement en la jerarquía de clases.
Cuando Control o sus clases derivadas heredan, Control vuelve a definir el valor predeterminado de esta propiedad que se va a true
.
Cuando se hereda por Label (que es una clase derivada de Control), el valor predeterminado se vuelve a redefinir para que sea false
.
Información de la propiedad dependency
Campo identificador | FocusableProperty |
Propiedades de metadatos establecidas en true |
Ninguno |
Notas a los desarrolladores de herederos
Al derivar de UIElement directamente (en lugar de desde Control), considere si desea que el elemento sea centrable, ya que de forma predeterminada el elemento no será centrable. Si desea que el elemento se pueda centrar, invalide los metadatos de esta propiedad en el constructor estático del tipo de la siguiente manera:
FocusableProperty.OverrideMetadata(typeof(myElement), new UIPropertyMetadata(true));
FocusableProperty.OverrideMetadata(GetType(myElement), New UIPropertyMetadata(True))
donde myElement
debe ser el nombre de clase del tipo en el que se va a invalidar el valor de metadatos.