ডাব্লুপিএফ-এ পাঠ্যবক্সে ফোকাস সেট করুন


105

কীভাবে TextBoxডাব্লুপিএফ- তে কোনও উপাদানের উপর ফোকাস সেট করা যায়

আমার এই কোডটি রয়েছে:

txtCompanyID.Focusable = true;
txtCompanyID.Focus();

...কিন্তু এটা কাজ করছে না.

কোন ধারণা?


txtCompanyID.Focusable = সত্য; Keyboard.Focus (txtCompanyID); এটা কাজ করে কিন্তু এইভাবে।
মাইন্ডরোস্টারমির

উত্তর:


145

এক্সএএমএল-তে:

<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}">
   <TextBox Name="Box" />
</StackPanel>

9
আমি উপরের অন্যদের কাছে এই পদ্ধতির পছন্দ করি যেহেতু এটি এমভিভিএমের সাথে সামঞ্জস্য রাখে।
টড স্প্রিং

1
কেন্দ্রীভূত উপাদানটি কেবলমাত্র পঠনযোগ্য ঠিক কীভাবে আপনি xaml এ সেট করতে পারেন? আমি এটি ব্যবহার করেছি এবং এটি <শৈলী। ট্রিগার> <ট্রিগার সম্পত্তি = "যাচাইকরণ.হ্যাসেরার" মান = "সত্য"> <সেটর সম্পত্তি = "ফোকাসম্যানেজার.ফোকাসডিলমেন্ট" মান "=" inding বাধ্যতামূলক উত্স = {আপেক্ষিক উত্স স্ব}} " /> << ট্রিগার> </ স্টাইল.ট্রিগার>
WPFKK

@ user841612, নিম্নলিখিত সংযোগটির পরীক্ষা করুন এবং এসেম্বলি এবং নামস্থান যাচাই msdn.microsoft.com/en-us/library/...
usefulBee

এটি শুধুমাত্র একবারে কাজ করে। পৃষ্ঠাটি তৈরি হওয়ার পরে আপনি যদি ফোকাস পরিবর্তন করতে চান তবে আপনার এটি প্রোগ্রামিকভাবে করা দরকার।
জো স্টিল

এটিও কাজ করে। txtCompanyID.Focusable = সত্য; Keyboard.Focus (txtCompanyID);
মাইন্ডরোস্টারমির

51

কেউ এখনও পর্যন্ত ব্যাখ্যা করেন নি কেন প্রশ্নে কোডটি কাজ করে না। আমার অনুমান যে কোডটি উইন্ডো কনস্ট্রাক্টরে রাখা হয়েছিল। তবে এই মুহুর্তে ফোকাস সেট করা খুব তাড়াতাড়ি। উইন্ডোটি ইন্টারঅ্যাকশনের জন্য প্রস্তুত হওয়ার পরে এটি করা উচিত। কোডের জন্য সর্বোত্তম জায়গা হ'ল লোডড ইভেন্ট:

public KonsoleWindow() {
  public TestWindow() {
    InitializeComponent();
    Loaded += TestWindow_Loaded;
  }

  private void TestWindow_Loaded(object sender, RoutedEventArgs e) {
    txtCompanyID.Focus();
  }
}

1
যৌক্তিকভাবে সত্য, খুব বেশি লড়াইয়ের পরেও উত্তরটি বেশ ভাল এবং সমাধান হিসাবে নিখুঁত।
শিভানি

এটি আমার জন্য কাজ করেছে। অনুমোদিত উত্তর না। ধন্যবাদ
বাউন্ডফোর্ডগ্লোরি

সংস্করণ সুনির্দিষ্ট কিনা তা নিশ্চিত নয় তবে এর Focus()জন্য ফোকাসের স্টেট প্যারামিটারের প্রয়োজন - যেমনtxtCompanyId.Focus(FocusState.Keyboard)
ড্যান

49

ফোকাসম্যানেজ.সেটফোকসড এলিমেন্ট চেষ্টা করুন

FocusManager.SetFocusedElement(parentElement, txtCompanyID)

5
আপনি যদি যে উপাদানটিতে ফোকাস সেট করতে চান তা হ'ল প্যারেন্ট এলিমেন্ট ওও?
ব্রুক হেনসলে

10
ফোকাস ম্যানেজ.সেটফোকসড এলিমেন্ট (ফোকাস ম্যানেজ.গেটফোকসস্কোপ (প্যারেন্টইলিমেন্ট), প্যারেন্টএলমেন্ট);
ফিল্টার

26
txtCompanyID.Focusable = true;
Keyboard.Focus(txtCompanyID);

MSDN:

পুরো ডেস্কটপে কেবলমাত্র একটি উপাদান থাকতে পারে যার কীবোর্ড ফোকাস রয়েছে। ডাব্লুপিএফ-তে, যে উপাদানটিতে কীবোর্ড ফোকাস রয়েছে সেগুলির ইস্কিবোর্ডফোকসড সত্য হয়ে থাকবে।

আপনি সেটিং লাইনটি ভেঙে IsKeyboardFocusedসম্পত্তিটির মূল্য পরীক্ষা করতে পারেন । এছাড়াও আপনি সত্যিই সেই লাইনে পৌঁছেছেন কিনা কিনা তা পরীক্ষা করে দেখুন বা তারপরে ফোকাস পেতে আপনি অন্য কিছু উপাদান সেট করেছেন।


19

এটা চেষ্টা কর : MyTextBox.Focus ( );


2
এটি সর্বাধিক মার্জিত উত্তর এবং এর জন্য আপনার পিতামাতাকেও নির্দিষ্ট করার দরকার নেই। এর জন্য ধন্যবাদ, এটি আমার পক্ষে দুর্দান্ত কাজ করে!
dbeachy1

পিটার হুবারের উত্তর এটি করে তবে ব্যাখ্যা করে যে উইন্ডোটি প্রথমে লোড করা দরকার, এ কারণেই আমার কাজ করা হয়নি
অ্যাড্রিয়ান দাভেল

14

আমি স্ট্যাকপ্যানেলের পরিবর্তে গ্রিড ব্যবহার করছিলাম বলে এগুলির কোনওটিই আমার পক্ষে কাজ করেনি।

আমি শেষ পর্যন্ত এই উদাহরণটি পেয়েছি: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/

এবং এটিতে এটি সংশোধিত:

'সংস্থানসমূহ' বিভাগে:

    <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>

আমার গ্রিড সংজ্ঞায়:

<Grid Style="{StaticResource FocusTextBox}" />

2
এটি আমার জন্যও কাজ করেছিল। বাকি ছিল না। লিঙ্কটির জন্য ধন্যবাদ, এটি বেশ আকর্ষণীয় ছিল। আকর্ষণীয় যে এই জাতীয় একটি সহজ জিনিস এত জটিল হতে পারে।
ট্র্যাভিসভিডন

2
উপরের উত্তরটি নির্বিশেষে সূক্ষ্মভাবে কাজ করে যদি কনটেইনারটি গার্ড বা স্ট্যাকপ্যানেল হয়। যেহেতু আপনার গ্রিডের কাঠামো পরিষ্কার নয়, তাই কী ভুল হতে পারে তা বলা শক্ত। যদিও বিকল্প দেখতে ভাল লাগছে।
দরকারী

1
আমার জন্য, এটি সঠিকভাবে কাজ করার একমাত্র। চমৎকার উপায়.
অরেগনহোস্ট

7

আপনি যদি অন্য উত্তরের সমাধানটি না পেয়ে থাকেন তবে আমি এইভাবে সমস্যার সমাধান করেছি।

Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
    TEXTBOX_OBJECT.Focus();
}), System.Windows.Threading.DispatcherPriority.Render);

আমি যা বুঝি সেগুলি থেকে অন্যান্য সমাধানগুলি কাজ করতে পারে না কারণ Focus()অ্যাপ্লিকেশনটি অন্যান্য উপাদানগুলি রেন্ডার করার আগে কলটি কল করা হয়েছিল।


3
এই উত্তরটি আরও ভাল র‌্যাঙ্কের দাবিদার।
সাইমন মাউরিয়ার

0

আর একটি সম্ভাব্য সমাধান হ'ল ফ্রি ডেভ এক্সপ্রেস এমভিভিএম ফ্রেমওয়ার্ক দ্বারা প্রদত্ত ফোকাসবিহার ব্যবহার করা :

<TextBox Text="This control is focused on startup">
    <dxmvvm:Interaction.Behaviors>
        <dxmvvm:FocusBehavior/>
    </dxmvvm:Interaction.Behaviors>
</TextBox>

এটি আপনাকে যখন কোনও লোড লোড করা হয়, যখন কোনও নির্দিষ্ট ইভেন্ট উত্থাপিত হয় বা কোনও সম্পত্তি পরিবর্তন করা হয় তখন কোনও নিয়ন্ত্রণকে ফোকাস করতে দেয়।


0

কোডের পিছনে আপনি কেবল এটি করে তা অর্জন করতে পারেন।

 private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            txtIndex.Focusable = true;
            txtIndex.Focus();
        }

দ্রষ্টব্য: উইন্ডোটি লোড হওয়ার আগে এটি কাজ করবে না

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.