কীভাবে ডাব্লুপিএফ-এর পেইজে লোডের কম্বো বাক্সে "- নির্বাচন টিম -" ডিফল্ট পাঠ্য প্রদর্শন করবেন?


109

একটি ডাব্লুপিএফ অ্যাপ্লিকেশনে, এমভিপি অ্যাপে আমার একটি কম্বো বাক্স রয়েছে, যার জন্য আমি ডেটাবেস থেকে প্রাপ্ত ডেটা প্রদর্শন করি। আইটেমগুলি কম্বো বাক্সে যুক্ত করার আগে আমি ডিফল্ট পাঠ্য যেমন প্রদর্শন করতে চাই

" -- দল নির্বাচন কর --"

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

ডিবি থেকে ডেটা নির্বাচন করা হচ্ছে। ব্যবহারকারী কম্বো বাক্স থেকে কোনও আইটেম নির্বাচন না করা পর্যন্ত আমাকে ডিফল্ট পাঠ্য প্রদর্শন করা দরকার।

আমাকে গাইড করুন

উত্তর:


107

এটি করার সবচেয়ে সহজ উপায়টি হ'ল:

<ComboBox Name="MyComboBox"
 IsEditable="True"
 IsReadOnly="True"
 Text="-- Select Team --" />

আপনার অবশ্যই অন্যান্য বিকল্পগুলি যুক্ত করতে হবে তবে এটি সম্ভবত এটি করার সহজতম উপায়।

এই পদ্ধতির একদম নেতিবাচক দিক রয়েছে যা আপনার কম্বো বাক্সের ভিতরে থাকা পাঠ্য সম্পাদনাযোগ্য হবে না, এটি এখনও নির্বাচনযোগ্য। তবে, আমি আজ পর্যন্ত খুঁজে পেয়েছি এমন প্রতিটি বিকল্পের নিম্নমানের এবং জটিলতার কারণে, এটি সম্ভবত সেরা বিকল্প।


দুর্দান্ত উত্তর ক্রিস! আমি কেবল ফোকাসযোগ্য = "সত্য" যুক্ত করব তবে এটি কেবল প্রসাধনী পরিবর্তন।
স্লাভিসা

6
নিখুঁত উত্তর ক্রিস। একটি সম্পত্তি এত বড় পার্থক্য করতে পারে: ডি
অস্টার ওয়েগাস

4
Focusable="False" IsEditable="True" IsReadOnly="True"
কামিল লেলোনেক

1
+1 টি। দুর্ভাগ্যক্রমে এটি মিশ্র আইটেমগুলির সাথে কাজ করে না (উদাহরণস্বরূপ যদি কম্বোবক্স আইটেমগুলি চিত্র হয়)।
গ্রীনল্ডম্যান

11
সহজ এবং কাজের সমাধান। ডাব্লুপিএফ নিয়ন্ত্রণগুলির পুরো ফ্রেমওয়ার্ক জুড়ে এই জাতীয় সমস্যা রয়েছে। এখানে এবং সেখানে নিয়ন্ত্রণগুলি এমন বৈশিষ্ট্যগুলি হারিয়েছে যা বেশিরভাগ বিকাশকারীদের প্রয়োজন। ফলস্বরূপ, বিকাশকারীরা সমাধানগুলি অনুসন্ধান করতে, তৃতীয় পক্ষের বিকল্প নিয়ন্ত্রণগুলি কিনে, বা কার্যকারণগুলি বাস্তবায়নের জন্য তাদের সময় নষ্ট করে ... ডাব্লুপিএফ টিম এমনকি তাদের নিজস্ব বিকাশের জন্য নিয়ন্ত্রণগুলিও ব্যবহার করে?
অভিশাপিত শাকসব্জি

90

আপনি কোনও ব্যবহার করে পিছনে কোনও কোড ছাড়াই এটি করতে পারেন IValueConverter

<Grid>
   <ComboBox
       x:Name="comboBox1"
       ItemsSource="{Binding MyItemSource}"  />
   <TextBlock
       Visibility="{Binding SelectedItem, ElementName=comboBox1, Converter={StaticResource NullToVisibilityConverter}}"
       IsHitTestVisible="False"
       Text="... Select Team ..." />
</Grid>

এখানে আপনার কাছে রূপান্তরকারী শ্রেণি রয়েছে যা আপনি পুনরায় ব্যবহার করতে পারেন।

public class NullToVisibilityConverter : IValueConverter
{
    #region Implementation of IValueConverter

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value == null ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

এবং অবশেষে, আপনাকে একটি সংস্থান বিভাগে আপনার রূপান্তরকারী ঘোষণা করতে হবে।

<Converters:NullToVisibilityConverter x:Key="NullToVisibilityConverter" />

রূপান্তরকারী হ'ল জায়গাটি যেখানে আপনি রূপান্তরকারী শ্রেণি রেখেছেন। একটি উদাহরণ:

xmlns:Converters="clr-namespace:MyProject.Resources.Converters"

এই পদ্ধতির সম্পর্কে খুব সুন্দর জিনিসটি আপনার কোডের পিছনে কোডটির কোনও পুনরাবৃত্তি নয়।


আমি এটি ব্যবহার করতে চাই, তবে মনে হচ্ছে যে কম্বোবক্স একটি ডেটাগ্রিডের শিরোনাম cases । । এক্সএএমএল একটি ত্রুটি দেয় যা শিরোনামটি ইতিমধ্যে সংজ্ঞায়িত হয়েছে (বা সম্ভবত একাধিকবার সংজ্ঞায়িত করা যাবে না)। কোন ধারনা? আমি কেবল একটি নাল মান বিকল্প ব্যবহার করার জন্য ভাবছি, যা এটি নির্বাচন করে পুনরায় সেট করার অনুমতি দেবে, তবে মনে হচ্ছে কিছুটা opালু।
পল গিবসন

1
এটি একটি দুর্দান্ত সমাধানের একটি বড় কারণ হ'ল প্রায় প্রতিটি ডেটা-বেঁধে ডাব্লুপিএফ প্রকল্পটি নলটোভিজিবিলিটি কনভার্টারের ব্যবহার করে তাই এটি ইতিমধ্যে বেশিরভাগ সময় রয়েছে - পাশাপাশি এটি ব্যবহার করতে পারে!
tpartee

2
আসলে আপনি DataTriggerএখানে রূপান্তরকারী কোডটি এড়াতে একটি ব্যবহার করতে পারেন :)
বিলি ওনিল

49

আমি ট্রাই কিউর উত্তরটি পছন্দ করি তবে সেই মান রূপান্তরকারীগুলি ব্যবহারের জন্য ব্যথা। পলবি ইভেন্ট হ্যান্ডলারটি দিয়ে এটি করেছে, তবে এটিও অপ্রয়োজনীয়। এখানে একটি খাঁটি এক্সএএমএল সমাধান রয়েছে:

<ContentControl Content="{Binding YourChoices}">
    <ContentControl.ContentTemplate>
        <DataTemplate>
            <Grid>
                <ComboBox x:Name="cb" ItemsSource="{Binding}"/>
                <TextBlock x:Name="tb" Text="Select Something" IsHitTestVisible="False" Visibility="Hidden"/>
            </Grid>
            <DataTemplate.Triggers>
                <Trigger SourceName="cb" Property="SelectedItem" Value="{x:Null}">
                    <Setter TargetName="tb" Property="Visibility" Value="Visible"/>
                </Trigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ContentControl.ContentTemplate> 
</ContentControl>

33

কেউ বলেনি একটি খাঁটি এক্সএএমএল সমাধান জটিল হতে হবে। এখানে পাঠ্য বাক্সে 1 ডেটা ট্রিগার সহ একটি সাধারণ one প্রযোজ্য হিসাবে প্রান্তিক এবং অবস্থান

<Grid>
    <ComboBox x:Name="mybox" ItemsSource="{Binding}"/>
    <TextBlock Text="Select Something" IsHitTestVisible="False">
           <TextBlock.Style>
                <Style TargetType="TextBlock">
                      <Setter Property="Visibility" Value="Hidden"/>
                      <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=mybox,Path=SelectedItem}" Value="{x:Null}">
                                  <Setter Property="Visibility" Value="Visible"/>
                             </DataTrigger>
                      </Style.Triggers>
                </Style>
           </TextBlock.Style>
     </TextBlock>
</Grid>

5
ডেটা ট্রিগারটিতে আমার "দৃশ্যমানতা =" লুকানো "সরিয়ে নেওয়া দরকার ছিল তখন এটি আশানুরূপভাবে কাজ করেছিল Def অবশ্যই আমি দেখেছি সবচেয়ে দীর্ঘ এগিয়ে যাওয়া পদ্ধতি approach পুনঃব্যবহারযোগ্যতার জন্য, আমি শৈলীতে একটি উত্সে স্থানান্তরিত করেছি
মিচ

@ মিচ আইসফোরসের উত্তর আমার পক্ষে কাজ করছে না, এটির কাজটি করার জন্য আপনি কী পরিবর্তন করেছেন?
ক্রিস

1
@ ক্রিস আমার ধারণা, তিনি বোঝাতে চেয়েছিলেন ট্রিগারটির <Setter Property="Visibility" Value="Hidden"/>বাইরে (স্টাইলের ভিতরে) যুক্ত করা এবং Visibility="Hidden"আসল পাঠ্যরূপ উপাদানটি সরিয়ে দেওয়া
মনিকা

@ মিচ, আপনি যদি কোনও নির্দিষ্ট অবজেক্টের (মাইবক্স) দিকে ইশারা করে ডেটাট্রিগারে এলিমেন্টনাম থাকে তবে আপনি টেক্সটব্লক শৈলীটিকে কীভাবে পুনরায় ব্যবহারের জন্য উত্সে স্থানান্তর করবেন? জেনেরিক উপায়ে সেই নামটি নির্দিষ্ট করার কোনও উপায় আছে কি?
CRApHeR

24

উপাদান সেট IsEditable="True"করুন ComboBox। এটি এর Textসম্পত্তি প্রদর্শন করবে ComboBox


2
এটি সম্পূর্ণ থেকে সহজ সমাধান।
সের্গে কৌলিকভ

6
নিয়ন্ত্রণটি দেখতে কেমন লাগে তা পরিবর্তিত করে
সাইমনালেেক্সান্ডার 20055

16

এটি সরাসরি সমর্থিত কিনা তা আমি জানি না তবে আপনি কম্বলটিকে একটি লেবেল দিয়ে ওভারলে করতে পারেন এবং নির্বাচনটি বাতিল না হলে এটি লুকিয়ে রাখতে পারেন।

যেমন।

<Grid>
   <ComboBox Text="Test" Height="23" SelectionChanged="comboBox1_SelectionChanged" Name="comboBox1" VerticalAlignment="Top" ItemsSource="{Binding Source=ABCD}"  />
   <TextBlock IsHitTestVisible="False" Margin="10,5,0,0" Name="txtSelectTeam" Foreground="Gray" Text="Select Team ..."></TextBlock>
</Grid>

তারপরে নির্বাচনের পরিবর্তিত হ্যান্ডলার ...

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    txtSelectTeam.Visibility = comboBox1.SelectedItem == null ? Visibility.Visible : Visibility.Hidden;
}

1
সেলশনচেনজড হ্যান্ডলারটি পরিবর্তে টেক্সটব্লকের দৃশ্যমানতাটি এক্সএএমএল-এ সেট করা যেতে পারে।
aliceraunsbaek

6

আইসফর্সের উত্তরের ভিত্তিতে আমি একটি পুনরায় ব্যবহারযোগ্য সমাধান প্রস্তুত করেছি:

xaml শৈলী:

<Style x:Key="ComboBoxSelectOverlay" TargetType="TextBlock">
    <Setter Property="Grid.ZIndex" Value="10"/>
    <Setter Property="Foreground" Value="{x:Static SystemColors.GrayTextBrush}"/>
    <Setter Property="Margin" Value="6,4,10,0"/>
    <Setter Property="IsHitTestVisible" Value="False"/>
    <Setter Property="Visibility" Value="Hidden"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding}" Value="{x:Null}">
            <Setter Property="Visibility" Value="Visible"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

ব্যবহারের উদাহরণ:

<Grid>
     <ComboBox x:Name="cmb"
               ItemsSource="{Binding Teams}" 
               SelectedItem="{Binding SelectedTeam}"/>
     <TextBlock DataContext="{Binding ElementName=cmb,Path=SelectedItem}"
               Text=" -- Select Team --" 
               Style="{StaticResource ComboBoxSelectOverlay}"/>
</Grid>

খুশী হলাম। নামটি সেট না করার জন্য আমি কোনও আপেক্ষিক উত্স ব্যবহার করে টেক্সটব্লকের ডেটা কনটেক্সটকে আবদ্ধ করে এটি সরিয়ে দিয়েছি। মার্কআপের জন্য পরবর্তী মন্তব্যটি দেখুন (এসও এর মন্তব্যে কোডটি কুৎসিত দেখাচ্ছে)
সাসাচা

<TextBlock DataContext = "{বাঁধাই পথ = শিশু [0] .SelectedItem, RelativeSource = {RelativeSource AncestorType = গ্রিড}}" পাঠ্য = "- নির্বাচন প্রকল্প -" style = "{StaticResource ComboBoxSelectOverlay}" />
Sascha

4

কম্বো বাক্স দিয়ে চেষ্টা করে দেখেনি তবে এটি অন্যান্য নিয়ন্ত্রণের সাথে আমার পক্ষে কাজ করেছে ...

এজেক্র্যাপড ব্লগপোস্ট

তিনি জলছবি প্রদর্শন করতে এখানে আলোরনার স্তরটি ব্যবহার করেন।


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

ভাল স্টাফ, এটি কেবল কম্বোবক্স সমস্যা সমাধান করে না, তবে এখন আমি ডাব্লুপিএফ সরঞ্জাম সমাবেশ থেকে মুক্তি পেতে পারি এবং এটি কেবল ওয়াটারমার্কটেক্সটবক্স নিয়ন্ত্রণের পরিবর্তে আমার টেক্সটবক্সগুলিতে ব্যবহার করতে পারি, তাই জয়ের পূর্ণ :) - ওহ বিটিডব্লিউ এটি জিক আটকে যায় না সম্মত ফাঁদ!
dain

2

হ্যাপিএনমাদের সমাধানটি খুব ভাল ছিল এবং অবশেষে আমাকে এই সামান্য ভিন্ন সমাধানে আসতে সহায়তা করেছিল।

<ComboBox x:Name="ComboBoxUploadProject" 
    Grid.Row="2"
    Width="200" 
    Height="23"                           
    Margin="64,0,0,0"
    ItemsSource="{Binding projectList}"
    SelectedValue ="{Binding projectSelect}" 
    DisplayMemberPath="projectName"
    SelectedValuePath="projectId"
    >
    <ComboBox.Template>
        <ControlTemplate TargetType="ComboBox">
            <Grid>
                <ComboBox x:Name="cb" 
                    DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}" 
                    ItemsSource="{Binding ItemsSource, RelativeSource={RelativeSource TemplatedParent}}"
                    SelectedValue ="{Binding SelectedValue, RelativeSource={RelativeSource TemplatedParent}}" 
                    DisplayMemberPath="projectName"
                    SelectedValuePath="projectId"
                    />
                <TextBlock x:Name="tb" Text="Select Item..." Margin="3,3,0,0" IsHitTestVisible="False" Visibility="Hidden"/>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger SourceName="cb" Property="SelectedItem" Value="{x:Null}">
                    <Setter TargetName="tb" Property="Visibility" Value="Visible"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </ComboBox.Template>
</ComboBox>

2

সবচেয়ে সহজ উপায় হ'ল কম্বোবক্সে সরাসরি ডাটাবেস থেকে ডিফল্ট পাঠ্য এবং ডেটা মার্জ করার জন্য কমপোজিট কালেকশন ব্যবহার করা

    <ComboBox x:Name="SelectTeamComboBox" SelectedIndex="0">
        <ComboBox.ItemsSource>
            <CompositeCollection>
                <ComboBoxItem Visibility="Collapsed">-- Select Team --</ComboBoxItem>
                <CollectionContainer Collection="{Binding Source={StaticResource ResourceKey=MyComboOptions}}"/>
            </CompositeCollection>
        </ComboBox.ItemsSource>
    </ComboBox>

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

<Window.Resources>
    <CollectionViewSource Source="{Binding}" x:Key="MyComboOptions" />
</Window.Resources>

এইভাবে আপনি আপনার কম্বোবক্স বিকল্পগুলি কেবল এক্সএএমএল যেমন সংজ্ঞায়িত করতে পারেন

   <ComboBox x:Name="SelectTeamComboBox" SelectedIndex="0">
        <ComboBox.ItemsSource>
            <CompositeCollection>
                <ComboBoxItem Visibility="Collapsed">-- Select Team --</ComboBoxItem>
                <ComboBoxItem >Option 1</ComboBoxItem>
                <ComboBoxItem >Option 2</ComboBoxItem>
            </CompositeCollection>
        </ComboBox.ItemsSource>
    </ComboBox>

1

আমি নিম্নলিখিতটি সুপারিশ করব:

একটি আচরণ সংজ্ঞায়িত করুন

public static class ComboBoxBehaviors
{
    public static readonly DependencyProperty DefaultTextProperty =
        DependencyProperty.RegisterAttached("DefaultText", typeof(String), typeof(ComboBox), new PropertyMetadata(null));

    public static String GetDefaultText(DependencyObject obj)
    {
        return (String)obj.GetValue(DefaultTextProperty);
    }

    public static void SetDefaultText(DependencyObject obj, String value)
    {
        var combo = (ComboBox)obj;

        RefreshDefaultText(combo, value);

        combo.SelectionChanged += (sender, _) => RefreshDefaultText((ComboBox)sender, GetDefaultText((ComboBox)sender));

        obj.SetValue(DefaultTextProperty, value);
    }

    static void RefreshDefaultText(ComboBox combo, string text)
    {
        // if item is selected and DefaultText is set
        if (combo.SelectedIndex == -1 && !String.IsNullOrEmpty(text))
        {
            // Show DefaultText
            var visual = new TextBlock()
            {
                FontStyle = FontStyles.Italic,
                Text = text,
                Foreground = Brushes.Gray
            };

            combo.Background = new VisualBrush(visual)
            {
                Stretch = Stretch.None,
                AlignmentX = AlignmentX.Left,
                AlignmentY = AlignmentY.Center,
                Transform = new TranslateTransform(3, 0)
            };
        }
        else
        {
            // Hide DefaultText
            combo.Background = null;
        }
    }
}

ব্যবহার আচরণ

<ComboBox Name="cmb" Margin="72,121,0,0" VerticalAlignment="Top"
          local:ComboBoxBehaviors.DefaultText="-- Select Team --"/>

এটি একটি একক কম্বো বাক্সের জন্য কবজির মতো কাজ করে। তবে আমি যখন এটি 1 টিরও বেশি কম্বো ব্যবহার করি, এটি আমাকে একটি ত্রুটি দেয় (তবে সংকলন করে ভালভাবে চালায়) "'ডিফল্ট পাঠ্য' সম্পত্তি ইতিমধ্যে 'কম্বোবক্স' দ্বারা নিবন্ধিত হয়েছে" " আমি আমার ব্লগে ফিক্সটি উল্লেখ করেছি।
রোমশ ডি। নিরিলা

এই বিষয়টি চিহ্নিত করার জন্য ধন্যবাদ. আমি আমার কম্পিউটারে এই ত্রুটিটি উত্পাদন করতে পারি না। যাইহোক, আমি সম্মত হই যে টাইপফ (কম্বোবক্সবিহেইয়র্স) টাইপফ (কম্বোবক্স) এর পরিবর্তে রেজিস্টারঅ্যাটাকের তৃতীয় প্যারামিটারে পাস করা উচিত।
উসমান জাফর

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

1

আইসফর্সের উত্তরটি খুব কাছাকাছি ছিল এবং এটি এএফএইকে এই সমস্যার সহজ সমাধান। তবে এটি কিছু মিস করেছে, কারণ এটি কাজ করছে না (কমপক্ষে আমার জন্য, এটি আসলে পাঠ্যটি কখনই প্রদর্শন করে না)।

শেষ পর্যন্ত, আপনি যখন কম্বো বাক্সের নির্বাচিত আইটেমটি নালাগুলি না রেখে টেক্সটব্লকের "ভিজিবিলিটি" সম্পত্তিটি "লুকানো" হিসাবে সেট করতে পারবেন না; আপনাকে এটি ডিফল্টরূপে সেট করতে হবে (যেহেতু আপনি ট্রিগারগুলিতে নਾਲ পরীক্ষা করতে পারবেন না একই জায়গায় এক্সএএমএলএল সেটার ব্যবহার করে ।

তার ভিত্তিতে প্রকৃত সমাধানটি এখানে, নিখোঁজ সেটারটি ট্রিগারদের ঠিক সামনে রাখা হয়েছিল:

<ComboBox x:Name="combo"/>
<TextBlock Text="--Select Team--" IsHitTestVisible="False">
    <TextBlock.Style>
        <Style TargetType="TextBlock">

            <Style.Setters>
                <Setter Property="Visibility" Value="Hidden"/>
            </Style.Setters>

            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=combo,Path=SelectedItem}" Value="{x:Null}">
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

1

সম্পাদনা: নীচের মন্তব্যগুলিতে, এটি কোনও সমাধান নয়। আমি কীভাবে এটি কাজ করেছিলাম তা নিশ্চিত নই এবং সেই প্রকল্পটি চেক করতে পারি না।

সর্বশেষতম এক্সএএমএল-এর জন্য এই উত্তরটি আপডেট করার সময় এসেছে।

এই প্রশ্নের সমাধানের জন্য অনুসন্ধান করে এই এই প্রশ্নটি সন্ধান করে, আমি তখন আবিষ্কার করেছি যে আপডেট হওয়া এক্সএএমএল স্পেকের একটি সহজ সমাধান রয়েছে।

এই স্থানটি সম্পাদন করতে এখন "প্লেসহোল্ডার" নামে একটি বৈশিষ্ট্য উপলব্ধ। এটি এর মতোই সহজ (ভিজ্যুয়াল স্টুডিও 2015):

<ComboBox x:Name="Selection" PlaceholderText="Select...">
    <x:String>Item 1</x:String>
    <x:String>Item 2</x:String>
    <x:String>Item 3</x:String>
</ComboBox>

আমি এই সমাধানটি ব্যবহার করেছি - নেতিবাচক ভোটাররা কি বিস্তৃতভাবে যত্ন নিতে পারে? মঞ্জুর আমি কোনও এক্সএএমএল বিশেষজ্ঞ নই, তবে এটি কার্যকর হয়েছে।
রব স্যাডলার

1
যদিও আমি ডাউন ভোটার নই, আমি ধারণা করি যে শ্রেণিতে কোনও PlaceholderTextসম্পত্তি নেই বলে আপনি ভোট দিয়েছিলেন । এটি উইনফোর্ডস নয়, ডাব্লুপিএফ সম্পর্কে একটি প্রশ্ন। System.Windows.ComboBox
শেরিডান

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

2
আপনি ভুল নন, তবে এটি ডব্লিউপিএফের পক্ষে নয়। : UWP কম্বো এই আছে, দয়া করে এই পৃষ্ঠা দেখার msdn.microsoft.com/en-us/library/windows/apps/...
laishiekai

0

সেরা অনুশীলন নয়..কিন্তু ভাল কাজ করে ...

<ComboBox GotFocus="Focused"  x:Name="combobox1" HorizontalAlignment="Left" Margin="8,29,0,0" VerticalAlignment="Top" Width="128" Height="117"/>

পিছনে কোড

public partial class MainWindow : Window
{
    bool clearonce = true;
    bool fillonce = true;
    public MainWindow()
    {
        this.InitializeComponent();          
        combobox1.Items.Insert(0, " -- Select Team --");
        combobox1.SelectedIndex = 0;
    }

    private void Focused(object sender, RoutedEventArgs e)
    {
            if(clearonce)
            {
                combobox1.Items.Clear();
                clearonce = false;
            }
            if (fillonce)
            {
              //fill the combobox items here 
                for (int i = 0; i < 10; i++)
                {
                    combobox1.Items.Insert(i, i);
                }
                fillonce = false;
            }           
    }
}

0

আমি বিশ্বাস করি যে এই পোস্টে উল্লিখিত একটি জলছবি এই ক্ষেত্রে ভাল কাজ করবে

কিছুটা কোড দরকার আছে তবে আপনি যে কোনও কম্বোবক্স বা পাঠ্যবক্স (এবং এমনকি পাসওয়ার্ডবক্স) এর জন্য এটি পুনরায় ব্যবহার করতে পারেন তাই আমি এই উপায়ে পছন্দ করি


0

আমি আমার প্রকল্পে একটি ইসনুলকনভার্টার ক্লাস ব্যবহার করছি এবং এটি আমার পক্ষে কাজ করেছে। সি # তে এর জন্য কোডটি এখানে রয়েছে, রূপান্তরকারী নামে একটি ফোল্ডার তৈরি করুন এবং সেই ফোল্ডারে এই শ্রেণিটি যুক্ত করুন, কারণ ব্যবহৃত ট্রিগারটি নালার চেয়ে মান সমর্থন করে না, এবং ইসনুলকনভার্টার ঠিক এটি করে

 public class IsNullConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (value == null);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new InvalidOperationException("IsNullConverter can only be used OneWay.");
    }
}

এক্সএএমএল ফাইলে এর মতো নেমস্পেস যুক্ত করুন।

xmlns:Converters="clr-namespace:TymeSheet.Converter"

মানে

xmlns:Converters="clr-namespace:YourProjectName.Converter"

এক্সএএমএল কোডের মাধ্যমে এটিকে availabe করতে সংস্থানগুলির নীচে এই লাইনটি ব্যবহার করুন

<Converters:IsNullConverter x:Key="isNullConverter" />

এখানে এক্সএএমএল কোডটি রয়েছে, আমি এখানে ট্রিগারটি ব্যবহার করেছি তাই যখনই কোনও আইটেমি কম্বোবক্সে নির্বাচন করা হয় তখন আপনার পাঠ্যের ভিজিবিলিটি মিথ্যা হয়ে যায়।

<TextBlock Text="Select Project" IsHitTestVisible="False" FontFamily="/TimeSheet;component/Resources/#Open Sans" FontSize="14" Canvas.Right="191" Canvas.Top="22">
                        <TextBlock.Resources>
                            <Converters:IsNullConverter x:Key="isNullConverter"/>
                        </TextBlock.Resources>
                        <TextBlock.Style>
                            <Style TargetType="TextBlock">
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding ElementName=ProjectComboBox,Path=SelectedItem,Converter={StaticResource isNullConverter}}" Value="False">
                                        <Setter Property="Visibility" Value="Hidden"/>
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </TextBlock.Style>
                    </TextBlock>

0

// এক্সএএমএল কোড

// ভিউমোডেল কোড

    private CategoryModel _SelectedCategory;
    public CategoryModel SelectedCategory
    {
        get { return _SelectedCategory; }
        set
        {
            _SelectedCategory = value;
            OnPropertyChanged("SelectedCategory");
        }
    }

    private ObservableCollection<CategoryModel> _Categories;
    public ObservableCollection<CategoryModel> Categories
    {
        get { return _Categories; }
        set
        {
            _Categories = value;
            _Categories.Insert(0, new CategoryModel()
            {
                CategoryId = 0,
                CategoryName = " -- Select Category -- "
            });
            SelectedCategory = _Categories[0];
            OnPropertyChanged("Categories");

        }
    }

0

কিছুটা দেরি হলেও ..

আরও সহজ উপায় হ'ল প্যারামিটার ইসডমি = এর সাথে তালিকায় একটি ডামি ডেটা আইটেম যুক্ত করা এবং নিশ্চিত করুন যে এটি হিটটেষ্টভিজেবল নয় এবং এর দৈর্ঘ্যটি 1 পিক্সেল (একটি কনভার্টার ব্যবহার করে) যাতে এটি দেখা যায় না।

কেবল সিলেকশন-এ রেজিস্ট্রেশন করা এবং এটিতে ডামি আইটেম সূচকে সূচকটি সেট করুন।

এটি একটি কবজির মতো কাজ করে এবং এইভাবে আপনি কম্বোবক্স বা আপনার অ্যাপ্লিকেশন থিমের শৈলী এবং রঙগুলির সাথে গণ্ডগোল করবেন না।


0
InitializeComponent()
yourcombobox.text=" -- Select Team --";

উপরের কোডটি এটি অর্জনের সহজতম উপায় প্রদর্শন করে। উইন্ডো লোডের পরে, কম্বোবক্সের পাঠ্য বৈশিষ্ট্যটি ব্যবহার করুন। এটি ডেটপিকার, পাঠ্যবক্স এবং অন্যান্য নিয়ন্ত্রণগুলিতেও বাড়ানো যেতে পারে।


0

কোডবাইন্ডের মতো ডাটাবেস থেকে ডেটা দিয়ে কম্বোবক্সকে বাঁধানোর আগে আমি এটি করেছি -

Combobox.Items.Add("-- Select Team --");
Combobox.SelectedIndex = 0;

1
এটি কেবল ড্রপডাউনটিতে একটি বিকল্প হিসাবে পাঠ্য যুক্ত করে। ওপি যা চেয়েছিল তা ছিল না।
ডিন ফ্রিডল্যান্ড

এটি ডিফল্ট পাঠ্য যোগ করার বিষয়ে এবং আমি এটি এইভাবে করেছি
আতিক বাকি

0
  1. কম্বোবক্সের উপরে একটি লেবেল রাখুন।

  2. লেবেলের সামগ্রীটি কম্বোবক্স পাঠ্যের বৈশিষ্ট্যে আবদ্ধ করুন।

  3. কম্বোবক্সের অস্বচ্ছতা শূন্য, অপসারণ 0 = সেট করুন।

  4. কম্বোবক্স পাঠ্যের বৈশিষ্ট্যে ডিফল্ট পাঠ্য লিখুন

          <ComboBox Name="cb"
            Text="--Select Team--" Opacity="0" 
            Height="40" Width="140" >
             <ComboBoxItem Content="Manchester United" />
             <ComboBoxItem Content="Lester" />
         </ComboBox>
     </Grid>

-2

শুধুমাত্র সত্যে ইসেডেবল বৈশিষ্ট্য সেট করুন

<ComboBox Name="comboBox1"            
          Text="--Select Team--"
          IsEditable="true"  <---- that's all!
          IsReadOnly="true"/>

-3

আমি জানি এটি অর্ধেক পুরানো তবে এই উপায়টি কী:

<DataTemplate x:Key="italComboWM">
    <TextBlock FontSize="11" FontFamily="Segoe UI" FontStyle="Italic" Text="--Select an item--" />
</DataTemplate>

<ComboBox EmptySelectionBoxTemplate="{StaticResource italComboWM}" />

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