2009-11-24 9 views
15

Estoy desarrollando una aplicación WPF y tengo un TextBlock en el que quiero utilizar el enlace de comandos para activar un comando cuando se hace clic. ¿Cuál es la mejor manera de lograr esto?Habilitar el enlace de comandos para TextBlock

  • El control TextBlock-control no tiene una propiedad Command, pero sí tiene un CommandManager. ¿Que es esto? ¿Se puede usar para enlaces de comando? He visto muchos otros controles también con esta propiedad ..

  • ¿Hay algún control que haya supervisado que pueda usarse? Es, por ejemplo, ¿Se recomienda usar un botón y darle un estilo para que no se vea como un botón?

  • ¿Hay algunos controles compatibles con los enlaces de comando que puedo envolver alrededor de TextBlock?

  • ¿Debo crear un control personalizado que básicamente sea un TextBlock, pero con propiedades adicionales Command y CommandArgument que habilite el enlace de comandos en, p. Ej. la propiedad MouseLeftButtonDown.

Respuesta

17

¿Existe algún control He supervisado que se puede utilizar? Es, por ejemplo, ¿Se recomienda usar un botón y darle un estilo para que no se vea como un botón?

Sí. El enfoque más simple sería volver a crear una plantilla de un botón para actuar como un TextBlock y aprovechar la propiedad del comando en la clase de botón.

Algo como esto:

<ControlTemplate TargetType="Button"> 
     <TextBlock Text="{TemplateBinding Content}" /> 
    </ControlTemplate> 
... 
<Button Content="Foo" Command="{Binding Bar}" /> 
+0

Gracias. Funciona como se esperaba, ¡y en realidad es muy ordenado! He leído sobre ControlTemplates en "WPF Unleased" ahora, y esto parece correcto. ¿Qué hace "Text =" {ContentBinding Content} "" de todos modos? Vincular lo que configuro a los botones propiedad del contenido a la propiedad de texto en el bloque de texto? – stiank81

+0

Sí, eso es exactamente lo que hace. –

0
<Window.Resources> 
<CommandBinding x:Key="binding" Command="ApplicationCommands.Save" Executed="SaveCommand" CanExecute="SaveCommand_CanExecute" /> 
</Window.Resources> 


<TextBox Margin="5" Grid.Row="2" TextWrapping="Wrap" AcceptsReturn="True" TextChanged="txt_TextChanged"> 
<TextBox.CommandBindings> 
<StaticResource ResourceKey="binding"></StaticResource> 
</TextBox.CommandBindings> 
</TextBox> 

Ha visto http://www.java2s.com/Tutorial/CSharp/0470__Windows-Presentation-Foundation/BindTextBoxsavecommandtoCommandBinding.htm

+0

Explique cómo responde esta pregunta a la pregunta – CocoNess

2

La continuación XAML se puede utilizar para añadir un comando de unión a un TextBlock WPF que luego trabajar en una acción del ratón.

<TextBlock FontWeight="Bold" Text="Header" Cursor="Hand"> 
    <TextBlock.InputBindings> 
     <MouseBinding Command="ApplicationCommands.Cut" MouseAction="LeftClick"/> 
    </TextBlock.InputBindings> 
</TextBlock> 

El Command puede ser uno de los incorporados en los comandos de aplicación, que utilizaría la sintaxis como se muestra arriba, o puede ser una costumbre Command que hereda de la interfaz ICommand. En ese caso, la sintaxis sería:

<MouseBinding Command="{Binding myCustomCommand}" MouseAction="LeftClick"/> 

El MouseAction no proporciona ninguna consejos Intellisense en qué poner allí (en VS2015), por lo que tiene que hacer un poco de investigación para conseguir las enumeraciones válidos.

A partir de .NET 4.5, las entradas válidas para MouseAction son:

  • LeftClick - botón izquierdo del ratón.
  • LeftDoubleClick: botón izquierdo del mouse, haga doble clic.
  • MiddleClick - haga clic con el botón central del mouse.
  • MiddleDoubleClick - botón central del mouse haga doble clic.
  • Ninguno: ninguna acción.
  • RightClick - botón derecho del mouse, haga clic.
  • RightDoubleClick - botón derecho del mouse, haga doble clic.
  • WheelClick - Una rotación de la rueda del mouse.

Las constantes arriba mostradas están tomadas de MSDN.

+0

Si bien este código puede responder la pregunta, sería mejor explicar _como_ resuelve el problema sin introducir otros y _por qué_ usarlo. Las respuestas de solo código no son útiles a largo plazo. –

+0

Gracias por la sugerencia @BenjaminW. Esta es mi primera respuesta en la comunidad :-) – Praveen

+0

@Praveen, buena respuesta. Era exactamente lo que necesitaba. Edité tu respuesta para incluir más descripciones y consejos de uso. – Stewbob

Cuestiones relacionadas