2009-11-24 8 views
15

Sto sviluppando un'applicazione WPF e ho un TextBlock che voglio usare il bind del comando per attivare un comando quando cliccato. Qual è il modo migliore per raggiungere questo obiettivo?Abilita il bind del comando per TextBlock

  • Il TextBlock-controllo non dispone di una proprietà di comando, ma ha un CommandManager. Cos'è questo? Può essere usato per i comandi di comando? Ho visto molti altri controlli pure con questa proprietà ..

  • C'è qualche controllo che ho supervisionato che può essere utilizzato? Ad es. raccomandato di utilizzare un pulsante e lo stile per non sembrare un pulsante?

  • Esistono alcuni controlli che supportano i collegamenti di comando che posso avvolgere attorno a TextBlock?

  • Devo creare un controllo personalizzato che fondamentalmente è un TextBlock, ma con proprietà aggiuntive Command e CommandArgument che abilita il binding di comando su es. la proprietà MouseLeftButtonDown.

risposta

17

C'è qualche controllo ho supervisionato che può essere utilizzato? Ad es. raccomandato di utilizzare un pulsante e lo stile per non sembrare un pulsante?

Sì. L'approccio più semplice sarebbe quello di ricodificare un pulsante per agire come un TextBlock e sfruttare la proprietà del comando sulla classe button.

Qualcosa di simile a questo:

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

Grazie. Funziona come previsto - ed è in realtà abbastanza bello ..! Ho letto su ControlTemplates in "WPF Unleased" ora, e questo mi sembra giusto. Che cosa fa "Text =" {TemplateBinding Content} "" fa comunque? Bind cosa ho impostato per i pulsanti proprietà Content per la proprietà Text su TextBlock? – stiank81

+0

Sì, è esattamente quello che fa. –

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> 

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

+0

Si prega di spiegare come questa risposta affronta la domanda – CocoNess

2

Il sotto XAML può essere utilizzato per aggiungere un comando Binding a un WPF TextBlock che sarà quindi lavorare su un'azione del mouse.

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

Il Command può essere uno dei comandi incorporati applicazioni, che si avvalgono della sintassi come mostrato sopra, oppure può essere una consuetudine Command che eredita dalla ICommand interfaccia. In tal caso, la sintassi sarebbe:

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

Il MouseAction non fornisce eventuali suggerimenti Intellisense su cosa mettere lì (in VS2015), in modo da avere a che fare un po 'di scavo per ottenere le enumerazioni valide.

Come di .NET 4.5, le voci valide per MouseAction sono:

  • Pulsante sinistro - il tasto sinistro del mouse.
  • LeftDoubleClick - tasto sinistro del mouse doppio clic.
  • MiddleClick - clic del pulsante centrale del mouse.
  • MiddleDoubleClick - tasto centrale del mouse doppio clic.
  • Nessuno - Nessuna azione.
  • RightClick - fare clic con il pulsante destro del mouse.
  • RightDoubleClick - tasto destro del mouse doppio clic.
  • WheelClick - Rotazione della rotellina del mouse.

Le costanti mostrate sopra sono prese da MSDN.

+0

Mentre questo codice può rispondere alla domanda, sarebbe meglio spiegare _how_ risolve il problema senza introdurre gli altri e _why_ per usarlo. Le risposte al solo codice non sono utili a lungo termine. –

+0

Grazie per il suggerimento @BenjaminW. Questa è la mia prima risposta nella comunità :-) – Praveen

+0

@Praveen, buona risposta. Era esattamente ciò di cui avevo bisogno. Ho modificato la tua risposta per includere più descrizioni e suggerimenti sull'utilizzo. – Stewbob

Problemi correlati