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


91

এই ফোরামে এবং অন্যদের কিছু পোস্ট থাকা সত্ত্বেও আমি এমন কিছু খুঁজে পাচ্ছি না যা আমাকে কীভাবে ফোকাস সেট করবেন তা আমাকে বলে TextBox

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

আমি ট্যাবআইন্ডেক্স সেট করে ফেলেছি তবে এটি কাজ করে বলে মনে হচ্ছে না।

কোনও পরামর্শ?


উত্তর:


177

আপনি FocusManager.FocusedElementএই উদ্দেশ্যে সংযুক্ত সম্পত্তি ব্যবহার করতে পারেন । এখানে কোডের একটি অংশ রয়েছে যা ডিফল্টরূপে TxtB এ ফোকাস সেট করে।

<StackPanel Orientation="Vertical" FocusManager.FocusedElement="{Binding ElementName=TxtB}">
    <TextBox x:Name="TxtA" Text="A" />
    <TextBox x:Name="TxtB" Text="B" />
</StackPanel>

আপনি TxtB.Focus()যদি এক্সএএমএল এ না করতে চান তবে আপনি আপনার কোড-পিছনেও ব্যবহার করতে পারেন।


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

@ জুলিয়েনবয়েস্কোয়াইন: এটি একটি দুর্দান্ত সরল নিয়ন্ত্রণ ছিল, একটি গ্রিডের মধ্যে দুটি বোতাম এবং একটি টেক্সটবক্স (যেখানে আমি স্টাফটি রেখেছিলাম FocusManager)। শেষ পর্যন্ত, আমি কোড-পিছনে এটি করেছি।
তারকাডাল

সদস্য "ফোকাসড এলিমেন্ট" স্বীকৃত নয় বা অ্যাক্সেসযোগ্য নয়। :( Plus.google.com/photos/+HendyIrawan/albums/5990385944888867505/…
হেন্ডি ইরাওয়ান

@ হেন্ডি ইরাওয়ান এটি কি সিলভারলাইট প্রকল্প, সম্ভবত?
মোজো ফিল্টার

@ মোজোফিল্টার এটি একটি উইন্ডোজ ফোন 8 ডাব্লুপিএফ প্রকল্প
হেন্ডি ইরওয়ান

26

আপনি এই সম্পত্তিটি সরাসরি টেক্সটবক্সে প্রয়োগ করতে পারেন:

<TextBox Text="{Binding MyText}" FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}"/>

17
আমার পক্ষে কাজ করেনি, ফোকাসম্যানেজার.ফোকসডএলমেন্ট = "{বাঁধাইয়ের এলিমেন্টনাম = টিএসটিবি}" কনটেইনারটিতে কাজ করেছে
গ্রান্ট

4
কবজির মতো কাজ করে এবং কোনও নামিংয়ের প্রয়োজন হয় না।
সাইমন ম্যাটেস

4
আমার পক্ষেও কাজ করেনি। আমরা কি কিছু মিস করছি?
BrunoLM

4
আমার পক্ষেও কাজ করেনি। জুলিয়েন লেবোসকাইন কাজ দ্বারা পরামর্শ।
ক্রিপ্ট 32

4
আমার জন্যও কাজ করে না। প্রস্তাবিত অন্যান্য সমস্ত পদ্ধতিও কাজ করছে না। এই সমস্যাটি অবশ্যই প্রাথমিক হতে হবে এবং সহজেই সমাধানযোগ্য হতে হবে .. এজন্য অনেক পিপিএল ডাব্লুপিএফ পছন্দ করে না।
ইগরস্ট্যাক

6

আমি ডাব্লুপিএফ ব্যবহার করতে এবং উপরোক্ত উদাহরণগুলি পড়ার ক্ষেত্রে আমি নতুন, প্রদত্ত xaml কোড উদাহরণ ব্যবহার করে একটি পাঠ্যবক্সে ফোকাস সেট করার চেষ্টা করার অনুরূপ অভিজ্ঞতা পেয়েছি, যেমন উপরের সমস্ত উদাহরণ কার্যকর হয়নি work

আমি যা পেয়েছি তা হ'ল আমাকে পৃষ্ঠার উপাদানটিতে ফোকাসম্যানেজ.ফোকাসএলমেন্ট রাখতে হয়েছিল। আমি ধরে নিয়েছি এটি সম্ভবত কাজ করবে যদি আপনি মূল উপাদান হিসাবে উইন্ডো ব্যবহার করেন। যাইহোক, এখানে কোডটি আমার পক্ষে কাজ করেছে।

 <Page x:Class="NameOfYourClass"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  mc:Ignorable="d"
  Title="Title" 
  Height="720"
  Width="915"
  Background="white"
  Loaded="pgLoaded"
  FocusManager.FocusedElement="{Binding ElementName=NameOfYourTextBox}">

  <!-- Create child elements here. -->

  </Page>

0

আপনি যে উপাদানটিকে ফোকাস হিসাবে চিহ্নিত করতে চান তা বাঁধুন

FocusManager.FocusedElement= "{Binding ElementName= Comobox1}"

গ্রিড বা গ্রুপবক্স ইত্যাদিতে


4
ওহ, হ্যাঁ, সবাই একই উত্তর দেওয়ার জন্য ধন্যবাদ 4 বছর পরে ...
অ্যাডাম প্লোচার

4
অ্যাডামপ্লোচার ভাল লাগছে, আপনি সাল্ফিয়ানকে স্ট্যাক ওভারফ্লো স্থায়ীভাবে বন্ধ করে দিয়েছেন। একটি "ওয়েলকাম টু স্ট্যাক ওভারফ্লো" বার্তাটি আরও যথাযথ হত।
কনটাঙ্গো

4
@ কনটাঙ্গো: "শেষ দেখা Nov 11 '14" সে ছিল আগেই চলে গেছে সামনে আদম তার মন্তব্য :) পোস্ট
Gone কোডিং

0

ফোকাস ম্যানেজার ইন্টেলিজেন্সে ছিল না এবং এটি আমাকে কিছুটা বিভ্রান্ত করেছিল। আমি কেবল পুরো বৈশিষ্ট্যটি টাইপ করেছি এবং এটি কার্যকর হয়েছে।

ফোকাসম্যানেজ.ফোকাসডিলিমেট = "inding বাইন্ডিং এলিমেন্টনাম = মাই টেক্সটবক্স}"


মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও এন্টারপ্রাইজ 2015 সংস্করণ 14.0.23107.0/C#/WPF


0

সম্পূর্ণতার জন্য, পেছনের কোড থেকে এটি পরিচালনা করার একটি উপায়ও রয়েছে (যেমন নিয়ন্ত্রণের ক্ষেত্রে, যে কোনও কারণেই, গতিশীলভাবে তৈরি করা হয়েছিল এবং এক্সএএমএল-তে বিদ্যমান নেই)। উইন্ডোটির লোড হওয়া ইভেন্টের সাথে কোনও হ্যান্ডলার সংযুক্ত করুন এবং তারপরে আপনি চান নিয়ন্ত্রণের ".ফোকাস ()" পদ্ধতিটি ব্যবহার করুন। নিচু হাড় উদাহরণ।

public class MyWindow
{
    private VisualCollection controls;
    private TextBox textBox;

    // constructor
    public MyWindow()
    {
        controls = new VisualCollection(this);
        textBox = new TextBox();
        controls.Add(textBox);

        Loaded += window_Loaded;
    }

    private void window_Loaded(object sender, RoutedEventArgs e)
    {
        textBox.Focus();
    }
}

0

চারপাশে পরীক্ষা করা থেকে, এক্সএএমএল সমাধান

FocusManager.FocusedElement="{Binding ElementName=yourElement}"

আপনি এটিকে উইন্ডো হায়ারার্কিতে সর্বোচ্চ উপাদানটিতে রাখলে সবচেয়ে ভাল কাজ করে বলে মনে হয় (সাধারণত উইন্ডো, বা গ্রিডে আপনি সমস্ত কিছু রেখে দেন)


0

ব্যবহার: local:FocusManager.FocusOnLoad="True"

    public class FocusManager
    {
        public static readonly DependencyProperty FocusOnLoad = DependencyProperty.RegisterAttached(
            "FocusOnLoad",
            typeof(bool),
            typeof(FocusManager),
            new UIPropertyMetadata(false, new PropertyChangedCallback(OnValueChanged))
            );

        private static void OnValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            if (!(sender is Control control))
                return;

            if ((bool) e.NewValue == false)
                return;

            control.Loaded += (s, e) => control.Focus();
        }

        public static bool GetFocusOnLoad(DependencyObject d) => (bool) d.GetValue(FocusOnLoad);

        public static void SetFocusOnLoad(DependencyObject d, bool value) => d.SetValue(FocusOnLoad, value);
    }

0

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

<DataTemplate x:Key="DistanceView" DataType="{x:Type vm:ROI}">
    <Grid FocusManager.FocusedElement="{Binding ElementName=tbDistance}">
        <TextBox x:Name="tbDistance" Grid.Column="1" Grid.Row="1" VerticalAlignment="Bottom"/>
    </Grid>
</DataTemplate>

আমার জন্য কাজ করেনি।

তবে আমি যখন প্যারেন্ট কন্টেন্টকন্টারে ফোকাস () কল করি

private void ContentControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    if ((sender as ContentControl).IsVisible)
    {
        (sender as ContentControl).Focus();
    }
}

এটি কাজ শুরু করে এবং ক্যারেটটি টেক্সটবক্সে দৃশ্যমান। আমি মনে করি যে কোনও প্রভাব ফেলতে ফোকাসস্কোপকে ফোকাসম্যানেজার.ফোকাসডিলিমেন্ট বৈশিষ্ট্যের উপর ফোকাস দেওয়া উচিত।

জেরি

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