ডাব্লুপিএফ এবং প্রাথমিক ফোকাস


190

দেখে মনে হয় যে যখন ডাব্লুপিএফ অ্যাপ্লিকেশন শুরু হয় তখন কোনও কিছুর দৃষ্টি নিবদ্ধ থাকে না।

এটা সত্যিই অদ্ভুত। প্রতিটি অন্যান্য কাঠামো আমি ব্যবহার করেছি ঠিক তেমনটাই করে যা আপনি প্রত্যাশা করেন: প্রাথমিক ফোকাসটিকে ট্যাব ক্রমের প্রথম নিয়ন্ত্রণে রাখে। তবে আমি নিশ্চিত করেছি যে এটি কেবলমাত্র আমার অ্যাপ্লিকেশন নয়, এটি ডাব্লুপিএফ - যদি আমি একটি নতুন উইন্ডো তৈরি করি এবং এটিতে একটি পাঠ্যবক্স রাখি এবং অ্যাপটি চালাই তবে টেক্সটবক্সটিতে ক্লিক না করা বা ট্যাব টিপ না দেওয়া পর্যন্ত ফোকাস নেই doesn't । ইশ।

আমার আসল অ্যাপটি কেবল একটি টেক্সটবক্সের চেয়ে জটিল। ইউজারকন্ট্রোলগুলিতে ইউজারকন্ট্রোলের বেশ কয়েকটি স্তর রয়েছে। এই ইউজারকন্ট্রোলগুলির মধ্যে একটিতে ফোকাসযোগ্য = "সত্য" এবং কীডাউন / কীআপ হ্যান্ডলার রয়েছে এবং আমি চাই আমার উইন্ডোটি খোলার সাথে সাথেই এটি ফোকাসটি করা উচিত। যদিও আমি এখনও কিছুটা ডাব্লুপিএফ নবজাতক, যদিও আমি কীভাবে এটি করব তা নির্ণয় করতে খুব ভাগ্য পাচ্ছি না।

যদি আমি আমার অ্যাপ্লিকেশনটি শুরু করি এবং ট্যাব কী টিপুন, তবে আমার ফোকাসযোগ্য নিয়ন্ত্রণে ফোকাস চলে যায় এবং এটি আমার পছন্দ মতো কাজ করা শুরু করে। তবে আমি চাই না যে আমার ব্যবহারকারীরা উইন্ডোটি ব্যবহার শুরু করার আগে ট্যাবটিতে আঘাত করতে হবে।

আমি ফোকাস ম্যানেজার.ফোকসডএলিমেন্টের সাথে প্রায় খেলেছি, তবে আমি নিশ্চিত নই যে এটিকে কোন নিয়ন্ত্রণ স্থাপন করতে হবে (শীর্ষ স্তরের উইন্ডো? পিতামাতার মধ্যে ফোকাসযোগ্য নিয়ন্ত্রণ রয়েছে? মনোনিবেশযোগ্য নিয়ন্ত্রণ নিজেই?) বা কী সেট করতে হবে?

উইন্ডোটি খোলার সাথে সাথে প্রাথমিকভাবে মনোনিবেশ করার জন্য আমার গভীরভাবে নেস্টেড নিয়ন্ত্রণ পেতে আমাকে কী করতে হবে? বা আরও ভাল, ট্যাব ক্রম প্রথম দৃষ্টি নিবদ্ধযোগ্য নিয়ন্ত্রণ ফোকাস?

উত্তর:


164

এটিও কাজ করে:

<Window FocusManager.FocusedElement="{Binding ElementName=SomeElement}">

   <DataGrid x:Name="SomeElement">
     ...
   </DataGrid>
</Window>

4
আমি অবাক হলাম আমি প্রথম ব্যক্তি যিনি এই সম্পর্কে মন্তব্য করেছিলেন। এটি কোথায় গিয়েছিল তা নিয়ে আমি বিভ্রান্ত হয়ে পড়েছিলাম কারণ এটি প্রায় কোনও নিয়ন্ত্রণে যেতে পারে। এই সুনির্দিষ্ট প্রশ্নের উত্তরে আমি মনে করি এটি উইন্ডোতে চলে যাবে, তবে আপনি কীভাবে নিয়ন্ত্রণটিকে এই বিষয়গুলির সাথে সংযুক্ত করেন তা বোঝার জন্য আপনি msdn.microsoft.com/en-us/library/… এ মন্তব্যগুলি পড়তে পারেন ।
জোয়েল ম্যাকবেথ

আমি এই পদ্ধতির সাফল্যের সাথে স্ট্যাকপ্যানেলে ব্যবহার করেছি। যদি কেউ আগ্রহী হন তবে স্ট্যাকওভারফ্লো
জুলিও নোব্রে

এটি আমার পক্ষে গৃহীত উত্তরের চেয়ে অনেক বেশি ভাল কাজ করেছে কারণ আমার প্রথমে যে উপাদানটি রয়েছে তার দিকে ফোকাস দেওয়া দরকার।
পুটার্ডো বোরাটো

163

মনোনিবেশযোগ্য সম্পত্তিটি কোথায় ব্যবহার করা হয়েছে তা দেখার জন্য আমি রিফ্লেক্টরের মাধ্যমে খনন করার উজ্জ্বল ধারণা পেয়েছি এবং এই সমাধানের জন্য আমার পথ খুঁজে পেয়েছি। আমার উইন্ডোর নির্মাতাকে আমাকে কেবল নিম্নলিখিত কোডটি যুক্ত করতে হবে:

Loaded += (sender, e) =>
    MoveFocus(new TraversalRequest(FocusNavigationDirection.First));

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


21
এটি একটি আচরণে পরিণত করুন। <উইন্ডো ফোকাসবিহেভিয়ার.ফোকাস ফার্স্ট = "সত্য"> ... </ উইন্ডো>
উইকেম্পফ

6
@ ওয়েক্যাম্ফ, আমি আচরণের ধারণাটির সাথে পরিচিত নই, তবে আমি এটি সন্ধান করেছি এবং এটি মোটেই খারাপ ধারণা নয়। যদি অন্য কেউ (আমার মতো) ইতিমধ্যে সংযুক্ত আচরণগুলির সাথে পরিচিত না হন, তবে এখানে একটি ব্যাখ্যা দেওয়া হয়েছে: কোডেপ্রজেক্ট
জো হোয়াইট

1
অতিরিক্তভাবে, এটি যদি কাজ করে তবে পছন্দসই উপাদানটি এমন একটি ইউজারকন্ট্রোল যা প্রকৃত ফোকাসযোগ্য উপাদান (এমনকি গভীর স্তরবিন্যাসেও) থাকে contains গ্রেট!
ড্যানিয়েল অ্যালবুস্যাচট

1
দুর্দান্ত ধারণা, তবে কখনও কখনও এটি নিয়ন্ত্রণ করে না যে নিয়ন্ত্রণটি ফোকাস গ্রহণ করবে Button । এটি ঠিক করার জন্য, আমি অগ্রাধিকারে MoveFocusপ্রেরণকারীর মাধ্যমে কলটি ফ্লিপ করি ContextIdle( Backgroundবা উচ্চতর কাজ করে না)। এছাড়াও, এমন একটি আছে যা FocusNavigationDirection.Firstঅভিপ্রায়টির সাথে আরও ভালভাবে মেলে এবং এই ক্ষেত্রে একই কাজ করে does
আন্তন টিখি

এটা ডিফল্ট আচরণ করা উচিত! ইয়াক (মূল পোস্টে) ঠিক!
এনএইচ।

61

সংযুক্ত আচরণ হিসাবে বাস্তবায়িত গৃহীত উত্তরের ভিত্তিতে :

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

namespace UI.Behaviors
{
    public static class FocusBehavior
    {
        public static readonly DependencyProperty FocusFirstProperty =
            DependencyProperty.RegisterAttached(
                "FocusFirst",
                typeof(bool),
                typeof(FocusBehavior),
                new PropertyMetadata(false, OnFocusFirstPropertyChanged));

        public static bool GetFocusFirst(Control control)
        {
            return (bool)control.GetValue(FocusFirstProperty);
        }

        public static void SetFocusFirst (Control control, bool value)
        {
            control.SetValue(FocusFirstProperty, value);
        }

        static void OnFocusFirstPropertyChanged(
            DependencyObject obj, DependencyPropertyChangedEventArgs args)
        {
            Control control = obj as Control;
            if (control == null || !(args.NewValue is bool))
            {
                return;
            }

            if ((bool)args.NewValue)
            {
                control.Loaded += (sender, e) =>
                    control.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            }
        }
    }
}

এটি এর মতো ব্যবহার করুন:

<Window xmlns:Behaviors="clr-namespace:UI.Behaviors"
        Behaviors:FocusBehavior.FocusFirst="true">

6
আমার মতে, এটি এখন পর্যন্ত আমি খুঁজে পেয়েছি সেরা সমাধান। ধন্যবাদ!
শাওন

1
কলটিতে এই উত্তরে কোডটিতে একটি বাগ রয়েছে DependencyProperty.RegisterAttached। তৃতীয় প্যারামিটারটি হওয়া উচিত typeof(FocusBehavior), না typeof(Control)। এই পরিবর্তনটি করা ডিজাইনারকে 'কন্ট্রোল' ত্রুটি দ্বারা ইতিমধ্যে নিবন্ধিত 'ফোকাস ফার্স্ট' সম্পত্তিটি প্রতিবেদন করতে বাধা দেবে।
টনি ভিটাবিল

@ টনিভিটাবাইল স্থির আপনি সবসময় উত্তরগুলি সম্পাদনা করতে এবং উন্নত করতে স্বাধীন হন। :)
মিজিপজোর

নিয়ন্ত্রণ করা উচিত নয় o লোড ইভেন্ট ইভেন্ট হ্যান্ডলারটি আনলোডের সময় নিবন্ধভুক্ত করা উচিত?
andreapier

@ Andreapier আপনি যত্ন করে থাকলে আপনি তা করতে পারতেন, তবে নিবন্ধন এড়িয়ে যাওয়া মেমরির ফাঁস বা কোনও কারণ হতে পারে না। আপনার যদি কেবল স্বল্প-স্থায়ী অবজেক্টের কোনও দীর্ঘস্থায়ী অবজেক্টের সাথে কোনও ইভেন্টের সাথে সংযুক্ত থাকার পদ্ধতি থাকে তবে মেমরি ফাঁস হওয়ার ঘটনাগুলি নিয়ে আপনাকে কেবল উদ্বেগের প্রয়োজন। এই ক্ষেত্রে, জীবনকাল উইন্ডোটির, তাই আপনি ভাল আছেন।
জো হোয়াইট

14

আমি আর একটি সম্ভাব্য সমাধান খুঁজে পেয়েছি। মার্ক স্মিথ ফোকাস ম্যানেজার.ফোকাসডিলমেন্টের সাথে ব্যবহারের জন্য একটি ফার্স্টফোকাসডিলিমেন্ট মার্কআপ এক্সটেনশন পোস্ট করেছেন ।

<UserControl x:Class="FocusTest.Page2"
    xmlns:FocusTest="clr-namespace:FocusTest"
    FocusManager.FocusedElement="{FocusTest:FirstFocusedElement}">

পুরোপুরি চতুর! ধন্যবাদ!
অ্যান্ডি

8

একটি 'ডাব্লুপিএফ ইনিশিয়াল ফোকাস দুঃস্বপ্ন' থাকার পরে এবং স্ট্যাকের কয়েকটি উত্তরের উপর ভিত্তি করে নিম্নলিখিতটি আমার পক্ষে সেরা সমাধান হিসাবে প্রমাণিত।

প্রথমে আপনার App.xaml অন স্টার্টআপ () অনুসরণ করুন:

EventManager.RegisterClassHandler(typeof(Window), Window.LoadedEvent,
          new RoutedEventHandler(WindowLoaded));

তারপরে App.xaml এ 'উইন্ডোলোডেড' ইভেন্টটি যুক্ত করুন:

void WindowLoaded(object sender, RoutedEventArgs e)
    {
        var window = e.Source as Window;
        System.Threading.Thread.Sleep(100);
        window.Dispatcher.Invoke(
        new Action(() =>
        {
            window.MoveFocus(new TraversalRequest(FocusNavigationDirection.First));

        }));
    }

থ্রেডিং ইস্যুটি অবশ্যই ডাব্লুপিএফ প্রাথমিক ফোকাস হিসাবে ব্যবহার করা উচিত কারণ কিছু ফ্রেমওয়ার্ক রেসের শর্তের কারণে বেশিরভাগ ক্ষেত্রে ব্যর্থ হয়।

এটি পুরো অ্যাপ্লিকেশনের জন্য বিশ্বব্যাপী ব্যবহৃত হওয়ায় আমি নিম্নলিখিত সমাধানটি সবচেয়ে ভাল পেয়েছি।

আশা করি এটা সাহায্য করবে...

অরণ


5
BeginInvokeসেই ভীতিজনক Sleep(100)বিবৃতিটির পরিবর্তে ব্যবহার করুন ।
l33t

8

সাধারণ সমস্যার সাথে একই সমস্যা হ'ল মূল উইন্ডোতে:

  <Window ....
        FocusManager.FocusedElement="{Binding ElementName=usercontrolelementname}"
         ... />

ব্যবহারকারীর নিয়ন্ত্রণে:

private void UserControl_GotFocus_1(object sender, RoutedEventArgs e)
        {
            targetcontrol.Focus();
            this.GotFocus -= UserControl_GotFocus_1;  // to set focus only once
        }

3
যদি নিয়ন্ত্রণটি সরাসরি উইন্ডোতে থাকে তবে এটি ব্যবহারকারীর নিয়ন্ত্রণের ভিতরে বাসা বাঁধে না works
জো হোয়াইট

8

এক্সএএমএল-তে আপনি নিয়ন্ত্রণ নিয়ন্ত্রণের উপাদান হিসাবে নিজেকে সহজেই সেট করতে পারেন।

<Window>
   <DataGrid FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}">
     ...
   </DataGrid>
</Window>

আমি কখনই এটি একটি ব্যবহারকারীর নিয়ন্ত্রণে সেট করার চেষ্টা করেছি এবং এটি কাজ করে কিনা তা দেখার চেষ্টা করি না, তবে এটি হতে পারে।


এটি আকর্ষণীয় বলে মনে হচ্ছে, কারণ আপনি কেবলমাত্র একটি ফোকাস সমস্যার জন্য নিয়ন্ত্রণটির নাম রাখেন না। অন্যদিকে, ব্যবহারকারীর নিয়ন্ত্রণের সাথে আমার পরীক্ষা কার্যকর হয়নি।
হারিংগার

এটি আমাকে @ হেরঞ্জারকে অবাক করে না ... এটি একটি <সীমান্ত> বা অনুরূপ অ-ইন্টারেক্টিভ নিয়ন্ত্রণের উপর দৃষ্টি নিবদ্ধ করার চেষ্টা করার মতো। আপনি ব্যবহারকারীর নিয়ন্ত্রণের অভ্যন্তরে একটি ইন্টারেক্টিভ নিয়ন্ত্রণে এই ফোকাসডিলমেন্ট বৈশিষ্ট্যটি প্রয়োগ করার চেষ্টা করতে পারেন। তবে এটি কোনও বিকল্প হতে পারে না।
সাইমন গিলবি

আমি ফর্মটি লোড হওয়ার পরে কোন চাইল্ড বোতামটি ফোকাস করতে চেয়েছিলাম তা সেট করতে আমি এই স্ট্যাকপ্যানেলে ব্যবহার করেছি। অনেক অনেক ধন্যবাদ
জুলিও নোব্রে

সাবধানতা অবলম্বন করুন, এটি বাইন্ডিংগুলি সম্পূর্ণরূপে নষ্ট হয়ে যেতে পারে। stackoverflow.com/questions/30676863/...
Der_Meister

2

সি # 6+ এর জন্য মিজিপজরের উত্তরের একটি সর্বনিম্ন সংস্করণ ।

public static class FocusBehavior
{
    public static readonly DependencyProperty GiveInitialFocusProperty =
        DependencyProperty.RegisterAttached(
            "GiveInitialFocus",
            typeof(bool),
            typeof(FocusBehavior),
            new PropertyMetadata(false, OnFocusFirstPropertyChanged));

    public static bool GetGiveInitialFocus(Control control) => (bool)control.GetValue(GiveInitialFocusProperty);
    public static void SetGiveInitialFocus(Control control, bool value) => control.SetValue(GiveInitialFocusProperty, value);

    private static void OnFocusFirstPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
    {
        var control = obj as Control;

        if (control == null || !(args.NewValue is bool))
            return;

        if ((bool)args.NewValue)
            control.Loaded += OnControlLoaded;
        else
            control.Loaded -= OnControlLoaded;
    }

    private static void OnControlLoaded(object sender, RoutedEventArgs e) => ((Control)sender).MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}

আপনার এক্সএএমএল ব্যবহার করুন:

<Window local:FocusBehavior.GiveInitialFocus="True" />

1

আপনি যদি আমার মতো হয়ে থাকেন এবং আপনি এমন কিছু ফ্রেমওয়ার্ক ব্যবহার করছেন যা কোনওভাবে মৌলিক ফোকাস আচরণের সাথে জড়িয়ে পড়ে এবং আপত্তিহীন aboveর্ধ্বে সমস্ত সমাধান তৈরি করে, আপনি এখনও এটি করতে পারেন:

1 - যে উপাদানটি ফোকাস পান তা নোট করুন (তা যাই হোক না কেন!)

2 - এটি আপনার xxx.xaml.cs এর কোডে যুক্ত করুন

private bool _firstLoad;

3 - এটি প্রথম ফোকাস পান এমন উপাদানটিতে এটি যুক্ত করুন:

GotFocus="Element_GotFocus"

4 - পিছনের কোডটিতে এলিমেন্ট_গটফোকাস পদ্ধতি যুক্ত করুন এবং ডাব্লুপিএফ নামক উপাদানটি নির্দিষ্ট করুন যা প্রথম ফোকাসের প্রয়োজন:

private void Element_GotFocus(object sender, RoutedEventArgs e)
{
    if(_firstLoad)
    {
        this.MyElementWithFistFocus.Focus();
        _firstLoad = false;
    }
}

5 - লোড ইভেন্ট পরিচালনা করুন

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

Loaded="MyWindow_Loaded"   

xaml.cs এ

private void MyWindow_Loaded(object sender, RoutedEventArgs e)
{
        _firstLoad = true;
        this.Element_GotFocus(null, null);
}

আশা করি এটি সর্বশেষ সমাধানের সমাধান হিসাবে সহায়তা করবে


0

আমিও একই সমস্যার মুখোমুখি হয়েছি। ক্যানভাস ধারকটির ভিতরে আমার কাছে তিনটি পাঠ্য বাক্স ছিল এবং যখন ব্যবহারকারী নিয়ন্ত্রণ খোলার সময় প্রথম পাঠ্য বাক্সটি ফোকাস করা উচিত। ডাব্লুপিএফ কোড এমভিভিএম প্যাটার্ন অনুসরণ করেছে। আমি উপাদানটির ফোকাস করার জন্য একটি পৃথক আচরণের ক্লাস তৈরি করেছি এবং এটি আমার মতামতটির সাথে আবদ্ধ করে রেখেছি।

ক্যানভাস আচরণ কোড

public  class CanvasLoadedBehavior : Behavior<Canvas>
{
    private Canvas _canvas;
    protected override void OnAttached()
    {
        base.OnAttached();
        _canvas = AssociatedObject as Canvas;
        if (_canvas.Name == "ReturnRefundCanvas")
        {

            _canvas.Loaded += _canvas_Loaded;
        }


    }

    void _canvas_Loaded(object sender, RoutedEventArgs e)
    {
        FocusNavigationDirection focusDirection = FocusNavigationDirection.Next;

        // MoveFocus takes a TraveralReqest as its argument.
        TraversalRequest request = new TraversalRequest(focusDirection);
        UIElement elementWithFocus = Keyboard.FocusedElement as UIElement;
        if (elementWithFocus != null)
        {
            elementWithFocus.MoveFocus(request);
        }

    }

}

দেখার জন্য কোড

<Canvas  Name="ReturnRefundCanvas" Height="200" Width="1466" DataContext="{Binding RefundSearchViewModel}">
                <i:Interaction.Behaviors>
                    <b:CanvasLoadedBehavior />
                </i:Interaction.Behaviors>
                <uc:Keyboard Canvas.Left="973" Canvas.Top="111" ToolTip="Keyboard" RenderTransformOrigin="-2.795,9.787"></uc:Keyboard>
                <Label  Style="{StaticResource Devlbl}" Canvas.Left="28" Content="Return and Refund Search" Canvas.Top="10" />
                <Image Height="30" Width="28" Canvas.Top="6" Canvas.Left="5" Source="pack://application:,,,/HomaKiosk;component/images/searchF.png">
                    <Image.OpacityMask>
                        <ImageBrush ImageSource="pack://application:,,,/HomaKiosk;component/images/searchF.png"/>
                    </Image.OpacityMask>
                </Image>

                <Separator Height="4" Canvas.Left="6" Margin="0" Canvas.Top="35" Width="1007"/>

                <ContentControl Canvas.Top="45" Canvas.Left="21"
                    ContentTemplate="{StaticResource ErrorMsg}"
                    Visibility="{Binding Error, Converter={c:StringNullOrEmptyToVisibilityConverter}}" 
                    Content="{Binding Error}" Width="992"></ContentControl>

                <Label  Style="{StaticResource Devlbl}" Canvas.Left="29" Name="FirstName" Content="First Name" Canvas.Top="90" />
                <wpf:AutoCompleteTextBox  Style="{StaticResource AutoComp}" Height="32" Canvas.Left="33" ToolTip="First Name"  Canvas.Top="120" Width="205"                     Padding="10,5" TabIndex="1001"
                    VerticalAlignment="Top"

                    Watermark=""
                    IconPlacement="Left"
                    IconVisibility="Visible"
                    Delay="100"

                    Text="{Binding FirstName, Mode=TwoWay, TargetNullValue=''}" 
                    Provider="{Binding FirstNameSuggestions}">
                    <wpf:AutoCompleteTextBox.ItemTemplate>
                        <DataTemplate>
                            <Border Padding="5">
                                <StackPanel Orientation="Vertical">
                                    <TextBlock Text="{Binding}"
                   FontWeight="Bold" />
                                </StackPanel>
                            </Border>
                        </DataTemplate>
                    </wpf:AutoCompleteTextBox.ItemTemplate>
                </wpf:AutoCompleteTextBox>

                <Label Style="{StaticResource Devlbl}" Canvas.Left="250" Content="Last Name" Canvas.Top="90" />
                <wpf:AutoCompleteTextBox  Style="{StaticResource AutoComp}" Height="32" ToolTip="Last Name" Canvas.Left="250"  Canvas.Top="120" Width="205" Padding="10,5"  TabIndex="1002"
                    VerticalAlignment="Top"
                    Watermark=""
                    IconPlacement="Left"
                    IconVisibility="Visible"
                    Delay="100"
                   Text="{Binding LastName, Mode=TwoWay, TargetNullValue=''}" 
                    Provider="{Binding LastNameSuggestions}">
                    <wpf:AutoCompleteTextBox.ItemTemplate>
                        <DataTemplate>
                            <Border Padding="5">
                                <StackPanel Orientation="Vertical">
                                    <TextBlock Text="{Binding}"
                   FontWeight="Bold" />
                                </StackPanel>
                            </Border>
                        </DataTemplate>
                    </wpf:AutoCompleteTextBox.ItemTemplate>
                </wpf:AutoCompleteTextBox>

                <Label Style="{StaticResource Devlbl}" Canvas.Left="480" Content="Receipt No" Canvas.Top="90" />
                             <wpf:AutoCompleteTextBox  Style="{StaticResource AutoComp}" Height="32" ToolTip="Receipt No" Canvas.Left="480"  Canvas.Top="120" Width="205" Padding="10,5"  TabIndex="1002"
                    VerticalAlignment="Top"
                    Watermark=""
                    IconPlacement="Left"
                    IconVisibility="Visible"
                    Delay="100"
                    Text="{Binding ReceiptNo, Mode=TwoWay, TargetNullValue=''}" 
                    Provider="{Binding ReceiptIdSuggestions}">
                    <wpf:AutoCompleteTextBox.ItemTemplate>
                        <DataTemplate>
                            <Border Padding="5">
                                <StackPanel Orientation="Vertical" >
                                    <TextBlock Text="{Binding}"
                   FontWeight="Bold">

                                    </TextBlock>
                                </StackPanel>
                            </Border>
                        </DataTemplate>
                    </wpf:AutoCompleteTextBox.ItemTemplate>
                    <i:Interaction.Behaviors>
                        <b:AllowableCharactersTextBoxBehavior RegularExpression="^[0-9]+$" MaxLength="15" />
                    </i:Interaction.Behaviors>
                </wpf:AutoCompleteTextBox>
                <!--<Label Style="{StaticResource Devlbl}" Canvas.Left="710" Content="Duration" Canvas.Top="79" />-->
                <!--<ComboBox AllowDrop="True" Canvas.Left="710" ToolTip="Duration" Canvas.Top="107" Width="205" TabIndex="1004"
                    Style="{StaticResource CommonComboBox}"      
                    ItemsSource="{Binding Durations}" DisplayMemberPath="Description" SelectedValuePath="Id" SelectedValue="{Binding SelectedDate, Mode=TwoWay}">

                </ComboBox>-->

                <Button Content="Search" Style="{StaticResource MyButton}" ToolTip="Search" 
                    Canvas.Top="116" Canvas.Left="710" Cursor="Hand" 
                    Command="{Binding SearchCommand}" TabIndex="2001">
                </Button>
                <Button Content="Clear" Style="{StaticResource MyButton}"  ToolTip="Clear"
                    Canvas.Top="116" Canvas.Left="840" Cursor="Hand" 
                    Command="{Binding ClearCommand}" TabIndex="2002">
                </Button>
                <Image Height="25" Width="25" Canvas.Top="175" Canvas.Left="25" Source="pack://application:,,,/HomaKiosk;component/images/chkpending.png"/>
                <Label  Style="{StaticResource LegendLbl}" Canvas.Left="50" Content="Check Returned and Payment Pending" Canvas.Top="178" />
                <Image Height="25" Width="25" Canvas.Top="175" Canvas.Left="300" Source="pack://application:,,,/HomaKiosk;component/images/chkrepaid.png"/>
                <Label  Style="{StaticResource LegendLbl}" Canvas.Left="325" Content="Repaid" Canvas.Top="178" />
                <Image Height="25" Width="25" Canvas.Top="175" Canvas.Left="395" Source="pack://application:,,,/HomaKiosk;component/images/refund.png"/>
                <Label  Style="{StaticResource LegendLbl}" Canvas.Left="415" Content="Refunded" Canvas.Top="178" />
                 </Canvas>

0

উপরের সমাধানটি আমার জন্য প্রত্যাশার মতো কাজ করছিল না, আমি মিজিপজোরের প্রস্তাবিত আচরণটি নীচের হিসাবে কিছুটা পরিবর্তন করেছি:

এই অংশ থেকে

if ((bool)args.NewValue)
        {
            control.Loaded += (sender, e) =>
                   control.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
        }

এই

if ((bool)args.NewValue)
        {
            control.Loaded += (sender, e) => control.Focus();
        }

আন্ড আমি উইন্ডো বা ইউজারকন্ট্রোলের সাথে এই আচরণটি সংযুক্ত করছি না, তবে নিয়ন্ত্রণ করতে আমি প্রাথমিকভাবে ফোকাস করতে চাই, যেমন:

<TextBox ui:FocusBehavior.InitialFocus="True" />

ওহ, আলাদা আলাদা নামকরণের জন্য দুঃখিত আমি সংযুক্ত সম্পত্তির জন্য ইনিশিয়ালফোকস নামটি ব্যবহার করছি।

এবং এটি আমার পক্ষে কাজ করছে, সম্ভবত এটি অন্য কাউকে সাহায্য করতে পারে।


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