2009-07-14 11 views
8

में प्रारंभिक नियंत्रण फ़ोकस सेट करना मैं एक सिल्वरलाइट उपयोगकर्ता नियंत्रण पर एक विशिष्ट नियंत्रण में प्रारंभिक फ़ोकस स्वचालित रूप से सेट करने का एक तरीका ढूंढ रहा हूं। मेरे पास उपयोगकर्ता नाम टेक्स्टबॉक्स वाला एक लॉगिन पृष्ठ है और मैं इसे प्राप्त करना चाहता हूं ताकि जैसे ही उपयोगकर्ता पृष्ठ पर जाता है, उनके कर्सर पहले ही स्थानांतरित हो चुके हैं और उन्हें बॉक्स पर क्लिक करने के बजाय उपयोगकर्ता नाम टेक्स्टबॉक्स में प्रतीक्षा कर रहे हैं।सिल्वरलाइट

मैंने कॉल करने का प्रयास किया। UserControl के लोड किए गए ईवेंट में ध्यान दें लेकिन बिना किसी सफलता के। क्या कोई जानता है कि इसे कैसे करना है?

उत्तर

5

मैंने एक त्वरित SL3 ऐप को चाबुक किया और को प्रारंभिक फोकस उपयोगकर्ता नियंत्रण पर जाना मुश्किल है, सिल्वरलाइट नियंत्रण के भीतर अकेले नियंत्रण में रहने दें।

हालांकि, देखें कि this solution आपके लिए इस समस्या को हल करता है। आपको एक छोटी जावास्क्रिप्ट का उपयोग करना होगा।

<%@ Page Language="C#" AutoEventWireup="true" %> 

<%@ Register Assembly="System.Web.Silverlight" Namespace="System.Web.UI.SilverlightControls" 
    TagPrefix="asp" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" style="height:100%;"> 
<head runat="server"> 
    <title>Test Page For TextFocusTest</title> 
    <script type="text/javascript"> 
    window.onload = function() 
     { 
      document.getElementById('Xaml1').focus(); 
     } 
    </script> 
</head> 
<body style="height:100%;margin:0;"> 
    <form id="form1" runat="server" style="height:100%;"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
     <div style="height:100%;"> 
      <asp:Silverlight ID="Xaml1" runat="server" Source="~/ClientBin/TextFocusTest.xap" Version="2.0" Width="100%" Height="100%" /> 
     </div> 
    </form> 
</body> 
</html> 

एक बार आपके SL नियंत्रण ध्यान केंद्रित किया है, तो आप आगे फोकस एक विशिष्ट नियंत्रण करने के लिए की तरह कुछ का उपयोग कर सेट कर सकते हैं:

यहाँ संदर्भ के लिए कोड है

namespace SilverlightApplication2 
{ 
    public partial class MainPage : UserControl 
    { 
     public MainPage() 
     { 
      InitializeComponent(); 

      this.GotFocus += new RoutedEventHandler (MainPage_GotFocus); 
     } 

     void MainPage_GotFocus (object sender, RoutedEventArgs e) 
     { 
      uxLogin.Focus(); 
     } 
    } 
} 

जहां uxLogin में परिभाषित किया गया है XAML के रूप में:

<TextBox x:Name="uxLogin" Height="25" Width="100" /> 
+1

यह समाधान IE में काम करने के लिए लगता है, लेकिन मैं नहीं मिल सकता है सिल्वरलाइट नियंत्रण Firefox या Chrome में फोकस हासिल करने के लिए। –

+0

अभी भी यह अन्य ब्राउज़रों में काम नहीं कर सकता है लेकिन मैं इस समाधान के साथ जा रहा हूं क्योंकि अधिकांश उपयोगकर्ता आईई में होंगे और अन्य को सिल्वरलाइट नियंत्रण पर क्लिक करना होगा। धन्यवाद! –

+0

आपका स्वागत है। मुझे सिल्वरलाइट और एफएफ - आकार बदलने और बस प्रदर्शित करने के लिए नियंत्रण प्राप्त करने में बहुत सारी समस्याएं आई हैं। एक मामले में, मैंने अंत में छोड़ दिया और आईई के लिए एक और दूसरा एफएफ के लिए एक समाधान है। सबसे अच्छा तरीका नहीं है, लेकिन ओह ठीक है। –

16
public MainPage() 
{ 
    InitializeComponent(); 

    this.Loaded += new RoutedEventHandler(MainPage_Loaded); 
} 

void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    HtmlPage.Plugin.Focus(); 
    MyTextBox.Focus(); 
} 
+2

+1। यह सिल्वरलाइट 4 – Jehof

+1

+1 में मेरे लिए काम करता है सिल्वरलाइट 5 में भी मेरे लिए काम करता है – BaBu

3

यदि आप इसे PRISM या MVVM तरीके से करना चाहते हैं (कोड-कोड कोड से छुटकारा पाएं), तो आप एक व्यवहार को कार्यान्वित कर सकते हैं। मेरे मामले में मैं उपयोगकर्ता नाम फ़ील्ड में दृश्य को ध्यान में रखता हूं यदि यह खाली है और पासवर्ड में सेट होने पर (इसलिए 2 पैरामीटर)।

मेरे कार्यान्वयन:

public static class ControlTextFocusBehavior 
{ 
    public static readonly DependencyProperty FocusParameterProperty = DependencyProperty.RegisterAttached(
     "FocusParameter", 
     typeof(string), 
     typeof(ControlTextFocusBehavior), 
     new PropertyMetadata(OnSetFocusParameterCallBack)); 

    public static readonly DependencyProperty IsEmptyFocusedProperty = DependencyProperty.RegisterAttached(
     "IsEmptyFocused", 
     typeof(bool), 
     typeof(ControlTextFocusBehavior), 
     new PropertyMetadata(true)); 


    private static void OnSetFocusParameterCallBack(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e) 
    { 
     Control control = dependencyObject as Control; 
     if (control != null) 
     { 
      control.Loaded += new RoutedEventHandler(control_Loaded); 
     } 
    } 

    private static void control_Loaded(object sender, RoutedEventArgs e) 
    { 
     Control control = sender as Control; 
     control.Loaded -= new RoutedEventHandler(control_Loaded); 

     DependencyObject dependencyObject = sender as DependencyObject; 
     if (dependencyObject != null) 
     { 
      bool isEmptyFocused = GetIsEmptyFocused(dependencyObject); 
      bool isNullOrEmpty = string.IsNullOrEmpty(GetFocusParameter(dependencyObject)); 
      if ((isEmptyFocused && isNullOrEmpty) || 
       (!isEmptyFocused && !isNullOrEmpty)) 
      { 
       HtmlPage.Plugin.Focus(); 
       control.Focus(); 
      } 
     } 
    } 

    public static void SetFocusParameter(DependencyObject dependencyObject, string parameter) 
    { 
     dependencyObject.SetValue(FocusParameterProperty, parameter); 
    } 

    public static string GetFocusParameter(DependencyObject dependencyObject) 
    { 
     return dependencyObject.GetValue(FocusParameterProperty) as string; 
    } 


    public static void SetIsEmptyFocused(DependencyObject dependencyObject, bool parameter) 
    { 
     dependencyObject.SetValue(IsEmptyFocusedProperty, parameter); 
    } 

    public static bool GetIsEmptyFocused(DependencyObject dependencyObject) 
    { 
     return (bool)dependencyObject.GetValue(IsEmptyFocusedProperty); 
    } 
} 
1

आप इस कोड को चाहते हैं:

window.onload = function() सभी ब्राउज़रों में

{ 
     document.getElementById('Xaml1').focus(); 
    } 

काम करते हैं, आप के साथ तत्व के लिए tabindex सेट करना होगा id = "Xaml1"।

मेरी अंग्रेजी के लिए क्षमा करें

:)