2012-06-28 9 views
20

È possibile impostare la messa a fuoco automatica nella casella di testo nel mio file xaml?Come impostare la messa a fuoco automatica solo in xaml?

<Window x:Class="WpfApplication1.Views.Test1" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      Height="100" 
      Width="210" 
      WindowStartupLocation="CenterOwner" 
      ShowInTaskbar="False" 
      Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" 
      ResizeMode="CanResizeWithGrip"> 
    <TextBox HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Visible" TextWrapping="Wrap" AcceptsReturn="True" Text="{Binding Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
</Window> 

risposta

17
<TextBox FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}" /> 
+0

grazie, è quello che stavo cercando – David

+3

Non so perché, ma questo non funziona per me. Tuttavia, l'altro suggerimento che inserisce questa proprietà associata nell'intestazione con Binding in ElementName funziona per me. Senza vincolante, lancia un'eccezione. – newman

+1

Per qualche motivo non funziona quando 'TextBox' non è l'unico controllo nella finestra. –

13

Sì, è possibile utilizzare FocusManager.FocusedElement proprietà associata.

FocusManager.FocusedElement="{Binding ElementName=textBox1}" 
+2

v'è alcun modo, per fare questo senza un nome? – David

5

provare somethind come questo

<Window x:Class="WpfApplication18.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="500" Width="525" FocusManager.FocusedElement="textcontrol"> 
    <Grid> 
     <TextBox Name="textcontrol" /> 
    </Grid> 
</Window> 
+3

c'è un modo, per fare questo senza un nome? – David

+1

FocusManager.FocusedElement = "{Binding ElementName = textcontrol}" – anevil

-6

Io di solito risolvo questo con C#

textBox1.Focus(); 

Credo che sia il miglior modo per fare questo.

+0

che è un modo sporco per risolvere il problema ... – David

+1

Questa soluzione è semplice, leggibile ed evidente. –

+3

@ColonelPanic si, ma non è quello che è stato chiesto qui. –

4

Penso legame è un peso inutile, di riferimento è più leggero:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     FocusManager.FocusedElement="{x:Reference textBox1}"> 
    <StackPanel> 
     <TextBox x:Name="textBox1" /> 
    </StackPanel> 
</Window> 
+0

C'è davvero qualche differenza di prestazioni tra questo e l'associazione? – CodeHxr