Odak noktası nasıl TextBox
WPF'deki öğeye
Bu koda sahibim:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
...ama bu çalışmıyor.
Herhangi bir fikir?
Odak noktası nasıl TextBox
WPF'deki öğeye
Bu koda sahibim:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
...ama bu çalışmıyor.
Herhangi bir fikir?
Yanıtlar:
XAML'de:
<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}">
<TextBox Name="Box" />
</StackPanel>
Şu ana kadar kimse sorudaki kodun neden çalışmadığını açıklamadı. Benim tahminim, kodun Pencerenin yapıcısına yerleştirildiği yönünde. Ancak şu anda odaklanmak için henüz çok erken. Pencere etkileşime hazır olduğunda yapılması gerekir. Kod için en iyi yer Loaded olayıdır:
public KonsoleWindow() {
public TestWindow() {
InitializeComponent();
Loaded += TestWindow_Loaded;
}
private void TestWindow_Loaded(object sender, RoutedEventArgs e) {
txtCompanyID.Focus();
}
}
Focus()
örneğin - Odak devlet parametresini gerektirirtxtCompanyId.Focus(FocusState.Keyboard)
FocusManager.SetFocusedElement'i deneyin
FocusManager.SetFocusedElement(parentElement, txtCompanyID)
txtCompanyID.Focusable = true;
Keyboard.Focus(txtCompanyID);
msdn:
Tüm masaüstünde klavye odağına sahip yalnızca bir öğe olabilir. WPF'de, klavye odağına sahip öğenin IsKeyboardFocused değeri true olarak ayarlanacaktır.
Ayar çizgisinden sonra kırılabilir ve IsKeyboardFocused
mülkün değerini kontrol edebilirsiniz . Ayrıca o çizgiye gerçekten ulaşıp ulaşmadığınızı da kontrol edin veya belki bundan sonra odaklanmak için başka bir unsur ayarlayın.
Bunu dene : MyTextBox.Focus ( );
StackPanel yerine ızgara kullandığım için bunların hiçbiri benim için işe yaramadı.
Sonunda şu örneği buldum: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/
ve şu şekilde değiştirildi:
'Kaynaklar' bölümünde:
<Style x:Key="FocusTextBox" TargetType="Grid">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=textBoxName, Path=IsVisible}" Value="True">
<Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=textBoxName}"/>
</DataTrigger>
</Style.Triggers>
</Style>
Izgara tanımımda:
<Grid Style="{StaticResource FocusTextBox}" />
Diğer cevaplarda çözümü bulamadıysanız, sorunu bu şekilde çözdüm.
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
TEXTBOX_OBJECT.Focus();
}), System.Windows.Threading.DispatcherPriority.Render);
Anladığım kadarıyla, Focus()
uygulama diğer bileşenleri oluşturmadan önce çağrı çağrıldığı için diğer çözümler çalışmayabilir .
Diğer bir olası çözüm, ücretsiz DevExpress MVVM Framework tarafından sağlanan FocusBehavior'ı kullanmaktır :
<TextBox Text="This control is focused on startup">
<dxmvvm:Interaction.Behaviors>
<dxmvvm:FocusBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>
Yüklendiğinde, belirli bir olay ortaya çıktığında veya bir özellik değiştirildiğinde bir kontrole odaklanmanızı sağlar.
Arkasındaki Kod'da bunu ancak bunu yaparak başarabilirsiniz.
private void Window_Loaded(object sender, RoutedEventArgs e)
{
txtIndex.Focusable = true;
txtIndex.Focus();
}
Not: Pencere yüklenmeden çalışmaz