كيف يمكنني إعطاء النص التركيز في سيلفرلايت?

StackOverflow https://stackoverflow.com/questions/124649

  •  02-07-2019
  •  | 
  •  

سؤال

في تطبيق Silverlight, لا أستطيع التركيز إلى عنصر تحكم مربع نص.بناء على توصية من مختلف الوظائف ، لقد حدد IsTabStop الخاصية إلى True و أنا باستخدام مربع نص.التركيز().على الرغم من UserControl_Loaded الحدث إطلاق النار, عنصر تحكم مربع نص ليس الحصول على التركيز.لقد شملت بلدي بسيطة جدا البرمجية أدناه.ما أنا في عداد المفقودين ؟ شكرا

الصفحة.xaml

<UserControl x:Class="TextboxFocusTest.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Loaded="UserControl_Loaded" 
    Width="400" Height="300">

    <Grid x:Name="LayoutRoot" Background="White">        
        <StackPanel Width="150" VerticalAlignment="Center">            
            <TextBox x:Name="RegularTextBox" IsTabStop="True" />    
        </StackPanel>        
    </Grid>
</UserControl>

الصفحة.xaml.cs

using System.Windows;
using System.Windows.Controls;

namespace PasswordTextboxTest
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
        }

        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            RegularTextBox.Focus();
        }
    }
}
هل كانت مفيدة؟

المحلول

لقد وجدت هذا على silverlight.net و كان قادرا على الحصول على عمل بالنسبة لي بإضافة دعوة إلى النظام.يقوم نظام ويندوز.المتصفح.HtmlPage.البرنامج المساعد.التركيز() قبل الدعوة RegularTextBox.التركيز():

   private void UserControl_Loaded(object sender, RoutedEventArgs e)
   {        
      System.Windows.Browser.HtmlPage.Plugin.Focus();
      RegularTextBox.Focus();
   }

نصائح أخرى

Plugin.Focus(); 

لم يكن العمل بالنسبة لي.

الدعوة

 Dispatcher.BeginInvoke(() => { tbNewText.Focus();});

من الحدث Load عمل.

شكرا سانتياغو بالادينو المرسل عملت بالنسبة لي تماما.ما أقوم به هو:

هذا.Focus();ثم المرسل.BeginInvoke(() => { tbNewText.Focus();});

لقد حللت وضع في السيطرة المنشئ:

this.TargetTextBox.Loaded += (o, e) => { this.TargetTextBox.Focus(); };

هل أنت متأكد من أنك لا تحصل على التركيز ؟ هناك علة معروفة في بيتا 2 حيث ستحصل على التركيز و تكون قادرة على نوع لكنك لن تحصل على الإقحام أو الحدود.الحل هو الاتصال UpdateLayout() في مربع النص الصحيح قبل استدعاء التركيز().

سأحاول إضافة DispatcherTimer على UserLoaded الحدث الذي ينفذ طريقة التركيز أجزاء قليلة من الثانية بعد تحكم كاملة تحميل;ربما المشكلة هي هناك.

أنا أيضا في حاجة إلى دعوة

النشر.الحالي.المرسل.BeginInvoke(() => myTextbox.Focus());

ومن المثير للاهتمام أن هذه الدعوة يحدث داخل معالج حدث عندما mouseclick على TextBlock, انهيار TextBlock وجعل النص مرئية.إذا لم يتبع ذلك من قبل المرسل.BeginInvoke لن تحصل على التركيز.

-مايك

أنت رمز لتعيين التركيز هو الصحيح لأنه إذا قمت بإضافة زر المكالمات نفس الكود وهو يعمل تماما:

<StackPanel Width="150" VerticalAlignment="Center">
    <TextBox x:Name="RegularTextBox" IsTabStop="True" />
    <Button Click="UserControl_Loaded">
        <TextBlock Text="Test"/>
    </Button>
</StackPanel>

لذا أفترض أن هذا هو أن تفعل شيئا مع التركيز() تتطلب نوعا من التفاعل مع المستخدم.لم أستطع الحصول على عمل مع الحدث MouseMove على UserControl ، ولكن وضع الحدث KeyDown لتعيين التركيز يعمل (على الرغم من أن القالب لا تحديث تركز قالب).

Width="400" Height="300" Loaded="UserControl_Loaded" KeyDown="UserControl_KeyDown">

يبدو علة لي....

من متصفح التطبيقات System.Windows.Browser.HtmlPage.Plugin.Focus(); لا وجود لها.

انظر سؤالي هنا للحصول على أفكار أخرى.

بالنسبة لي كان يعمل في SL4 و IE7 و Firefox 3.6.12

النهائي في عداد المفقودين "قطعة" مما جعل التركيز على العمل (بالنسبة لي) كان الإعداد .TabIndex الملكية

        System.Windows.Browser.HtmlPage.Plugin.Focus();
        txtUserName.IsTabStop = true;
        txtPassword.IsTabStop = true;

        if (txtUserName.Text.Trim().Length != 0)
        {
            txtPassword.UpdateLayout();
            txtPassword.Focus();
            txtPassword.TabIndex = 0;
        }
        else
        {
            txtUserName.UpdateLayout();
            txtUserName.Focus();
            txtUserName.TabIndex = 0;
        }

صفحتي ليست جيدة بما فيه الكفاية التعليق على @جيم ب-ز الجواب ولكن ما عملت بالنسبة لي كان لإضافة معالج محملة الحدث على RichTextBox و داخل معالج إضافة

System.Windows.Browser.HtmlPage.Plugin.Focus();
<YourTextBox>.UpdateLayout()
<YourTextBox>.Focus();

ومع ذلك ، فإنه يعمل فقط على أي وما يليها.للحصول على انها تعمل على كروم وسفاري ، انتقل إلى الجزء السفلي من هذا

نسيت شيء واحد لم أجد وسيلة إلى تركيز القوة إلى تطبيقات Silverlight على الصفحة موثوق (سوف تعمل على بعض المتصفحات وليس على الآخرين).

لذلك قد يكون من أن سيلفرلايت التطبيق في حد ذاته لا يكون التركيز.أنا عادة خداع المستخدم إلى النقر على زر أو شيئا من هذا القبيل قبل أن أبدأ أتوقع مدخلات لوحة المفاتيح للتأكد من أن سيلفرلايت التطبيق لديه التركيز.

أنا أيضا واجهت هذه المشكلة ، ولكن ذلك قد نشأ من حالة مختلفة عما تمت الإجابة هنا بالفعل.

إذا كان لديك BusyIndicator التحكم في عرض و خفية على الإطلاق خلال عرض الضوابط لن تحصل على التركيز إذا كان لديك خطوط مثل

Dispatcher.BeginInvoke(() => { myControl.Focus();}); 

في الحدث load.

بدلا من ذلك, سوف تحتاج إلى استدعاء هذا الخط من التعليمات البرمجية بعد الخاص بك BusyIndicator عرض تم تعيين إلى false.

لدي سؤال متعلق هنا, فضلا عن حل لهذا السيناريو.

في الواقع مزعج beheviour.وجدت بسيطة واضحة الحل:

(VB code)

    Me.Focus()
    Me.UpdateLayout()

    Me.tbx_user_num.Focus()
    Me.tbx_user_num.UpdateLayout()

كل عنصر من عناصر أساسية ، كما في مشروعي على الأقل (VB2010 SL4 OutOfBrowser).

الائتمان : http://www.dotnetspark.com/kb/1792-set-focus-to-textbox-silverlight-3.aspx

أي من الإجابات أعلاه عملت لي مباشرة ، ما فعلته هو أنني وأضاف هذا الحدث في مشارك() منشئ:

this.Loaded += new RoutedEventHandler(MainPage_Loaded);

والتعامل معها على النحو التالي:

   void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        System.Windows.Browser.HtmlPage.Plugin.Focus();
        RegularTextBox.Focus();
    }

بلدي سيلفرلايت الإصدار 4.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top