ডাব্লুপিএফ সংখ্যাসূচক আপডাউন নিয়ন্ত্রণ কোথায়?


124

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

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

ধন্যবাদ


4
এক্সটেনটেড ডাব্লুপিএফ টুলকিটটিতে একটি রয়েছে: নিউমারিকআপডাউন ! Alt পাঠ্য
এডুয়ার্ডো মোল্টেনি

20
এই একক মন্তব্যটি আমার ব্লগে সর্বকালের ট্র্যাফিকের বৃহত্তম চালক। এমনকি আজ অবধি। অত্যধিক হাসিখুশি.
কেভিন মুর


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

2
ডাব্লুপিএফ টুলকিট এটি সমাধানের চেয়ে আরও বেশি সমস্যা তৈরি করে, এতে বেশ কয়েকটি সুস্পষ্ট বাগ রয়েছে; এবং মাইক্রোসফ্ট থেকে কোন নিউমারিকআপডাউন নিয়ন্ত্রণ নেই ... নরক, ডাব্লুপিএফ কি আরও বেঁচে আছে?
j00hi

উত্তর:


48

এক্সটেন্ডেড ডাব্লুপিএফ টুলকিটটিতে কেবল IntegerUpDownনিয়ন্ত্রণটি ব্যবহার করুন আপনি এটি ব্যবহার করতে পারেন:

  1. আপনার এক্সএএমএলতে নিম্নলিখিত নাম স্থানটিতে যুক্ত করুন:

    xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"

  2. আপনার এক্সএএমএল যেখানে আপনি নিয়ন্ত্রণ ব্যবহার করতে চান:

    <xctk:IntegerUpDown Name="myUpDownControl" />


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

সুবিধার জন্য এই কাস্টম ডাব্লুপিএফ নিয়ন্ত্রণগুলি ভিএস টুলবক্সে দেখানোর কোনও উপায় আছে কি? আমি সেগুলিকে 'সরঞ্জাম -> সরঞ্জাম বাক্স আইটেমগুলি চয়ন করুন' এর অধীনে খুঁজে পাইনি।
এভিয়েটর

2
এটি লক্ষ্য করা উচিত যে সংস্করণ v3.7.0 দিয়ে শুরু করে, ডাব্লুপিএফটোকলিটের উন্মুক্ত উত্স সংস্করণটি এমএস-পিএল ( রেফারেন্স ) এর পরিবর্তে মালিকানাধীন অ-বাণিজ্যিক লাইসেন্সের অধীনে সরবরাহ করা হয়েছে
জর্ডফ অফ

46

আমি নিজের তৈরি করেছি;

এক্সামল

<StackPanel Orientation="Horizontal">
    <TextBox x:Name="txtNum" x:FieldModifier="private" Margin="5,5,0,5" Width="50" Text="0" TextChanged="txtNum_TextChanged" />
    <Button x:Name="cmdUp" x:FieldModifier="private" Margin="5,5,0,5" Content="˄" Width="20" Click="cmdUp_Click" />
    <Button x:Name="cmdDown" x:FieldModifier="private" Margin="0,5,0,5"  Content="˅" Width="20" Click="cmdDown_Click" />
</StackPanel>

এবং পিছনে কোড

private int _numValue = 0;

public int NumValue
{
    get {  return _numValue; }
    set
    {
        _numValue = value;
        txtNum.Text = value.ToString();
    }
}

public NumberUpDown()
{
    InitializeComponent();
    txtNum.Text = _numValue.ToString();
}

private void cmdUp_Click(object sender, RoutedEventArgs e)
{
    NumValue++;
}

private void cmdDown_Click(object sender, RoutedEventArgs e)
{
    NumValue--;
}

private void txtNum_TextChanged(object sender, TextChangedEventArgs e)
{
    if (txtNum == null)
    {
        return;
    }

    if (!int.TryParse(txtNum.Text, out _numValue))
        txtNum.Text = _numValue.ToString();
}

ডাব্লুপিএফ .NET 4
AliR

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

2
বাঁধাইয়ের অনুমতি দেওয়ার জন্য নুমভ্যালু একটি নির্ভরশীল সম্পত্তি হতে হবে, এছাড়াও MinValue এবং ম্যাক্সভ্যালুর মতো অন্যান্য বৈশিষ্ট্যও দুর্দান্ত হবে।
কনরাড

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

18

এটি আপ এবং ডাউন কী ধরার সাথে আমার নিজের ব্যবহারকারীর নিয়ন্ত্রণের উদাহরণ।

Xaml কোড:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="13" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="13" />
        <RowDefinition Height="13" />
    </Grid.RowDefinitions>
    <TextBox Name="NUDTextBox"  Grid.Column="0" Grid.Row="0" Grid.RowSpan="2" TextAlignment="Right" PreviewKeyDown="NUDTextBox_PreviewKeyDown" PreviewKeyUp="NUDTextBox_PreviewKeyUp" TextChanged="NUDTextBox_TextChanged"/>
    <RepeatButton Name="NUDButtonUP"  Grid.Column="1" Grid.Row="0" FontSize="8" FontFamily="Marlett" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Click="NUDButtonUP_Click">5</RepeatButton>
    <RepeatButton Name="NUDButtonDown"  Grid.Column="1" Grid.Row="1" FontSize="8"  FontFamily="Marlett" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Height="13" VerticalAlignment="Bottom" Click="NUDButtonDown_Click">6</RepeatButton>
</Grid>

এবং কোড:

public partial class NumericUpDown : UserControl
{
    int minvalue = 0, 
        maxvalue = 100,
        startvalue = 10;
    public NumericUpDown()
    {
        InitializeComponent();
        NUDTextBox.Text = startvalue.ToString();
    }

    private void NUDButtonUP_Click(object sender, RoutedEventArgs e)
    {
        int number;
        if (NUDTextBox.Text != "") number = Convert.ToInt32(NUDTextBox.Text);
        else number = 0;
        if (number < maxvalue)
            NUDTextBox.Text = Convert.ToString(number + 1); 
    }

    private void NUDButtonDown_Click(object sender, RoutedEventArgs e)
    {
        int number;
        if (NUDTextBox.Text != "") number = Convert.ToInt32(NUDTextBox.Text);
        else number = 0;
        if (number > minvalue)
            NUDTextBox.Text = Convert.ToString(number - 1); 
    }

    private void NUDTextBox_PreviewKeyDown(object sender, KeyEventArgs e)
    {

        if (e.Key == Key.Up)
        {
            NUDButtonUP.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
            typeof(Button).GetMethod("set_IsPressed", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(NUDButtonUP, new object[] { true }); 
        }


        if (e.Key == Key.Down)
        {
            NUDButtonDown.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
            typeof(Button).GetMethod("set_IsPressed", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(NUDButtonDown, new object[] { true }); 
        }
    }

    private void NUDTextBox_PreviewKeyUp(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Up)
            typeof(Button).GetMethod("set_IsPressed", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(NUDButtonUP, new object[] { false });

        if (e.Key == Key.Down)
            typeof(Button).GetMethod("set_IsPressed", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(NUDButtonDown, new object[] { false });
    }

    private void NUDTextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        int number = 0;
        if (NUDTextBox.Text!="")
            if (!int.TryParse(NUDTextBox.Text, out number)) NUDTextBox.Text = startvalue.ToString();
        if (number > maxvalue)  NUDTextBox.Text = maxvalue.ToString();
        if (number < minvalue) NUDTextBox.Text = minvalue.ToString();
        NUDTextBox.SelectionStart = NUDTextBox.Text.Length;

    }

}

2
"মারলেট" ফন্টটি ব্যবহারকারীর সিস্টেমে থাকার নিশ্চয়তা রয়েছে?
কিওয়ার্টি

@ কিওয়ার্টি এটি আফ্রিকার ৩.১১ সাল থেকে উইন্ডোতে ডিফল্টরূপে।
ভূত

এটি একটি ভাল সমাধান এবং ইউডাব্লুপি এক্সএএমএল এর সাথেও কাজ করে বলে মনে হচ্ছে। প্রিভিউকিডাউন / প্রিভিউকিউইউপি পদ্ধতিগুলি নিয়ে কিছুটা সমস্যা হয়েছিল।
রাদদেবস

10
<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:numericButton2">


    <Style TargetType="{x:Type local:NumericUpDown}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:NumericUpDown}">              
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="*"/>
                                <RowDefinition Height="*"/>
                                <RowDefinition Height="*"/>
                            </Grid.RowDefinitions>
                            <RepeatButton Grid.Row="0" Name="Part_UpButton"/>
                            <ContentPresenter Grid.Row="1"></ContentPresenter>
                            <RepeatButton Grid.Row="2" Name="Part_DownButton"/>
                        </Grid>                  
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

    <Window x:Class="numericButton2.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:numericButton2"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <local:NumericUpDown Margin="181,94,253,161" x:Name="ufuk" StepValue="4" Minimum="0" Maximum="20">            
            </local:NumericUpDown>
            <TextBlock Margin="211,112,279,0" Text="{Binding ElementName=ufuk, Path=Value}" Height="20" VerticalAlignment="Top"></TextBlock>
        </Grid>
    </Window>
public class NumericUpDown : Control
{
    private RepeatButton _UpButton;
    private RepeatButton _DownButton;
    public readonly static DependencyProperty MaximumProperty;
    public readonly static DependencyProperty MinimumProperty;
    public readonly static DependencyProperty ValueProperty;
    public readonly static DependencyProperty StepProperty;   
    static NumericUpDown()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(NumericUpDown), new FrameworkPropertyMetadata(typeof(NumericUpDown)));
        MaximumProperty = DependencyProperty.Register("Maximum", typeof(int), typeof(NumericUpDown), new UIPropertyMetadata(10));
        MinimumProperty = DependencyProperty.Register("Minimum", typeof(int), typeof(NumericUpDown), new UIPropertyMetadata(0));
        StepProperty = DependencyProperty.Register("StepValue", typeof(int), typeof(NumericUpDown), new FrameworkPropertyMetadata(5));
        ValueProperty = DependencyProperty.Register("Value", typeof(int), typeof(NumericUpDown), new FrameworkPropertyMetadata(0));
    }
    #region DpAccessior
    public int Maximum
    {
        get { return (int)GetValue(MaximumProperty); }
        set { SetValue(MaximumProperty, value); }
    }
    public int Minimum
    {
        get { return (int)GetValue(MinimumProperty); }
        set { SetValue(MinimumProperty, value); }
    }
    public int Value
    {
        get { return (int)GetValue(ValueProperty); }
        set { SetCurrentValue(ValueProperty, value); }
    }
    public int StepValue
    {
        get { return (int)GetValue(StepProperty); }
        set { SetValue(StepProperty, value); }
    }
    #endregion
    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
        _UpButton = Template.FindName("Part_UpButton", this) as RepeatButton;
        _DownButton = Template.FindName("Part_DownButton", this) as RepeatButton;
        _UpButton.Click += _UpButton_Click;
        _DownButton.Click += _DownButton_Click;
    }

    void _DownButton_Click(object sender, RoutedEventArgs e)
    {
        if (Value > Minimum)
        {
            Value -= StepValue;
            if (Value < Minimum)
                Value = Minimum;
        }
    }

    void _UpButton_Click(object sender, RoutedEventArgs e)
    {
        if (Value < Maximum)
        {
            Value += StepValue;
            if (Value > Maximum)
                Value = Maximum;
        }
    }

}

9

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

শৈলী

<Style TargetType="{x:Type v:IntegerTextBox}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type v:IntegerTextBox}">
                    <Grid Background="Transparent">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="*"/>
                            <RowDefinition Height="*"/>
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>
                        <TextBox Name="tbmain" Grid.ColumnSpan="2" Grid.RowSpan="2"
                                 Text="{Binding Value, Mode=TwoWay, NotifyOnSourceUpdated=True, 
                            NotifyOnValidationError=True, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type v:IntegerTextBox}}}" 
                                               Style="{StaticResource ValidationStyle}" />
                        <RepeatButton Name="PART_UpButton" BorderThickness="0" Grid.Column="1" Grid.Row="0"
                                      Width="13" Background="Transparent">
                            <Path Fill="Black" Data="M 0 3 L 6 3 L 3 0 Z"/>
                        </RepeatButton>
                        <RepeatButton Name="PART_DownButton" BorderThickness="0" Grid.Column="1" Grid.Row="1"
                                      Width="13" Background="Transparent">
                            <Path Fill="Black" Data="M 0 0 L 3 3 L 6 0 Z"/>
                        </RepeatButton>

                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver"  Value="False">
                            <Setter Property="Visibility" TargetName="PART_UpButton" Value="Collapsed"/>
                            <Setter Property="Visibility" TargetName="PART_DownButton" Value="Collapsed"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

কোড

public partial class IntegerTextBox : UserControl
{
    public IntegerTextBox()
    {
        InitializeComponent();
    }

    public int Maximum
    {
        get { return (int)GetValue(MaximumProperty); }
        set { SetValue(MaximumProperty, value); }
    }
    public readonly static DependencyProperty MaximumProperty = DependencyProperty.Register(
        "Maximum", typeof(int), typeof(IntegerTextBox), new UIPropertyMetadata(int.MaxValue));



    public int Minimum
    {
        get { return (int)GetValue(MinimumProperty); }
        set { SetValue(MinimumProperty, value); }
    }
    public readonly static DependencyProperty MinimumProperty = DependencyProperty.Register(
        "Minimum", typeof(int), typeof(IntegerTextBox), new UIPropertyMetadata(int.MinValue));


    public int Value
    {
        get { return (int)GetValue(ValueProperty); }
        set { SetCurrentValue(ValueProperty, value); }
    }
    public readonly static DependencyProperty ValueProperty = DependencyProperty.Register(
        "Value", typeof(int), typeof(IntegerTextBox), new UIPropertyMetadata(0, (o,e)=>
        {
            IntegerTextBox tb = (IntegerTextBox)o;
            tb.RaiseValueChangedEvent(e);
        }));

    public event EventHandler<DependencyPropertyChangedEventArgs> ValueChanged;
    private void RaiseValueChangedEvent(DependencyPropertyChangedEventArgs e)
    {
        ValueChanged?.Invoke(this, e);
    }


    public int Step
    {
        get { return (int)GetValue(StepProperty); }
        set { SetValue(StepProperty, value); }
    }
    public readonly static DependencyProperty StepProperty = DependencyProperty.Register(
        "Step", typeof(int), typeof(IntegerTextBox), new UIPropertyMetadata(1));



    RepeatButton _UpButton;
    RepeatButton _DownButton;
    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
        _UpButton = Template.FindName("PART_UpButton", this) as RepeatButton;
        _DownButton = Template.FindName("PART_DownButton", this) as RepeatButton;
        _UpButton.Click += btup_Click;
        _DownButton.Click += btdown_Click;
    }


    private void btup_Click(object sender, RoutedEventArgs e)
    {
        if (Value < Maximum)
        {
            Value += Step;
            if (Value > Maximum)
                Value = Maximum;
        }
    }

    private void btdown_Click(object sender, RoutedEventArgs e)
    {
        if (Value > Minimum)
        {
            Value -= Step;
            if (Value < Minimum)
                Value = Minimum;
        }
    }

}

এখানে সেরা উত্তর। নির্ভরতা বৈশিষ্ট্যগুলির যথাযথ ব্যবহার।
কনরাড

5

ডাব্লুপিএফ নিয়ন্ত্রণ VerticalScrollBarসঙ্গে ব্যবহার করুন TextBlock। আপনার কোড পিছনে, নিম্নলিখিত কোড যুক্ত করুন:

কনস্ট্রাক্টরে স্ক্রোলবারের জন্য ইভেন্ট হ্যান্ডলারটি সংজ্ঞায়িত করুন:

scrollBar1.ValueChanged += new RoutedPropertyChangedEventHandler<double>(scrollBar1_ValueChanged);
scrollBar1.Minimum = 0;
scrollBar1.Maximum = 1;
scrollBar1.SmallChange = 0.1;

তারপরে ইভেন্ট হ্যান্ডলারটিতে যোগ করুন:

void scrollBar1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    FteHolderText.Text = scrollBar1.Value.ToString();
}

এখানে আমার কোড থেকে আসল স্নিপেট ... প্রয়োজনীয় পরিবর্তন করুন .. :)

public NewProjectPlan()
{
    InitializeComponent();

    this.Loaded += new RoutedEventHandler(NewProjectPlan_Loaded);

    scrollBar1.ValueChanged += new RoutedPropertyChangedEventHandler<double>(scrollBar1_ValueChanged);
    scrollBar1.Minimum = 0;
    scrollBar1.Maximum = 1;
    scrollBar1.SmallChange = 0.1;

    // etc...
}

void scrollBar1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    FteHolderText.Text = scrollBar1.Value.ToString();
}

1
আপনার সমাধানটি খুব স্মার্ট, তবে বোতামগুলি বিপরীত ক্রমে কাজ করছে (বোতাম ডাউন এটি হ্রাস করার সময় মান হ্রাস করে)) আমি আর একটি থ্রেড পেয়েছি যা এই সমস্যাটি সমাধানে সহায়ক হতে পারে: stackoverflow.com/a/27246296/637968 - কেবল স্ক্রোলবারটি ঘোরান
মাইক

5

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


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

লাইব্রেরি সহ দুর্দান্ত কাজ। খুব দরকারী. ধন্যবাদ।
namg_engr

5

9 বছরের প্রশ্নের উত্তর দেওয়ার জন্য ক্ষমা প্রার্থনা করুন।

আমি @ মাইকেল এর উত্তর অনুসরণ করেছি এবং এটি কার্যকর।

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

পরিবর্তনের সাথে মিশেল থেকে চলমান নিউমারিকআপডাউন নীচের মত হবে: -

এখানে চিত্র বর্ণনা লিখুন

ব্যবহারকারীর নিয়ন্ত্রণের জন্য কোড: -

TemplateNumericUpDown.xaml

<UserControl x:Class="UserControlTemplate.TemplateNumericUpDown"
             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" 
             xmlns:local="clr-namespace:UserControlTemplate"
             xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
             mc:Ignorable="d" MinHeight="48">
    <Grid Background="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="60"/>
        </Grid.ColumnDefinitions>
        <TextBox x:Name="txtNum" x:FieldModifier="private" Text="{Binding Path=NumValue}" TextChanged="TxtNum_TextChanged" FontSize="36" BorderThickness="0" VerticalAlignment="Center" Padding="5,0"/>
        <Grid Grid.Column="1">
            <Grid.RowDefinitions>
                <RowDefinition Height="30*"/>
                <RowDefinition Height="30*"/>
            </Grid.RowDefinitions>
            <Grid Background="#FF673AB7">
                <Viewbox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="Auto" Width="Auto">
                    <materialDesign:PackIcon Kind="ChevronUp" Foreground="White" Height="32.941" Width="32"/>
                </Viewbox>
                <Button x:Name="cmdUp" x:FieldModifier="private" Click="CmdUp_Click" Height="Auto" BorderBrush="{x:Null}" Background="{x:Null}"/>
            </Grid>
            <Grid Grid.Row="1" Background="#FF673AB7">
                <Viewbox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="Auto" Width="Auto">
                    <materialDesign:PackIcon Kind="ChevronDown" Foreground="White" Height="32.942" Width="32"/>
                </Viewbox>
                <Button x:Name="cmdDown" x:FieldModifier="private" Click="CmdDown_Click" Height="Auto" BorderBrush="{x:Null}" Background="{x:Null}"/>
            </Grid>
        </Grid>
    </Grid>
</UserControl>

TemplateNumericUpDown.cs

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

namespace UserControlTemplate
{
    /// <summary>
    /// Interaction logic for TemplateNumericUpDown.xaml
    /// </summary>
    public partial class TemplateNumericUpDown : UserControl
    {
        private int _numValue = 0;
        public TemplateNumericUpDown()
        {
            InitializeComponent();
            txtNum.Text = _numValue.ToString();
        }
        public int NumValue
        {
            get { return _numValue; }
            set
            {
                if (value >= 0)
                {
                    _numValue = value;
                    txtNum.Text = value.ToString();
                }
            }
        }

        private void CmdUp_Click(object sender, RoutedEventArgs e)
        {
            NumValue++;
        }

        private void CmdDown_Click(object sender, RoutedEventArgs e)
        {
            NumValue--;
        }

        private void TxtNum_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (txtNum == null)
            {
                return;
            }

            if (!int.TryParse(txtNum.Text, out _numValue))
                txtNum.Text = _numValue.ToString();
        }
    }
}

মাইপেজডিজাইন.এক্সএমএল-তে, তৈরি এবং ড্রপ তৈরি করা ইউজারকন্ট্রোল থাকবে <UserControlTemplate:TemplateNumericUpDown HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" Width="100"/>

এখানে চিত্র বর্ণনা লিখুন

টেমপ্লেট থেকে মান পেতে, আমি ব্যবহার

string Value1 = JournalNumStart.NumValue;
string Value2 = JournalNumEnd.NumValue;

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

** দ্রষ্টব্য: - আমি আমার প্রোগ্রামে সংরক্ষণাগারটিতে "সংরক্ষণাগার" নাম পরিবর্তন করেছি =)


আপ / ডাউন বোতামগুলির ব্যবহার ভয়াবহ: এগুলি খুব সহজে ব্যবহারযোগ্য নয়। তাদের পাঠ্য বাক্সের মতো সর্বনিম্ন উচ্চতায় হওয়া উচিত (এবং বর্গক্ষেত্র হতে হবে)। আমি জানি এটি আরও কিছুটা জায়গা নেয় তবে এটি আপনাকে কমপক্ষে ব্যবহারের যোগ্য বোতাম দেয়। অন্যথায় এগুলি প্রবেশ করার কোনও কারণ নেই।
ভিনসেন্ট

3

আমি একটি নিষ্পাপ সমাধান আছে কিন্তু দরকারী। কোডটি এখানে:

<Grid Name="TVGrid" Background="#7F000000">  <ScrollBar Background="Black" Orientation="Vertical" Height="35" HorizontalAlignment="Left" Margin="215,254,0,0" Minimum="0" Maximum="10" LargeChange="10" Value="{Binding ElementName=channeltext2, Path=Text}" x:Name="scroll" VerticalAlignment="Top" Width="12" RenderTransformOrigin="0.5,0.5" ValueChanged="scroll_ValueChanged" >  
        <ScrollBar.RenderTransform>  
            <TransformGroup>  
                <ScaleTransform/>  
                <SkewTransform/>  
                <RotateTransform Angle="-180"/>  
                <TranslateTransform/>  
            </TransformGroup>  
        </ScrollBar.RenderTransform>  
    </ScrollBar>  
    <TextBox Name="channeltext" HorizontalContentAlignment="Center" FontSize="20"  Background="Black" Foreground="White" Height="35" HorizontalAlignment="Left" Margin="147,254,0,0" VerticalAlignment="Top" Width="53" Text="0" />  
    <TextBox Name="channeltext2" Visibility="Hidden" HorizontalContentAlignment="Center" FontSize="20"  Background="Black" Foreground="White" Height="35" HorizontalAlignment="Left" Margin="147,254,0,0" VerticalAlignment="Top" Width="53" Text="0" />  </Grid>  

3

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

https://github.com/Dirkster99/NumericUpDownLib


1

নমুনা করার জন্য কেবল একটি ব্যবহারিক:

-রাইট ক্লিক করুন আপনার প্রকল্পে (সমাধানের অধীনে), "ন্যুগেট প্যাকেজগুলি পরিচালনা করুন ..." নির্বাচন করুন

- মেনুতে "wpftoolkit" জন্য ট্যাব অনুসন্ধান ব্রাউজ ক্লিক করুন , " Extended.Wpf.Toolkit" নির্বাচন করুন

- এটি ইনস্টল!

আপনার ইউজার কন্ট্রোল ক্লিক -Right টুলবক্স , "ট্যাব জুড়ুন .." নির্বাচন করুন এবং এটির নাম "WPF টুলকিট"

নতুন "ডাব্লুপিএফ টুলকিট" ট্যাবে রাইট ক্লিক করুন, "আইটেমগুলি চয়ন করুন ..." নির্বাচন করুন

- মেনুতে "ব্রাউজ করুন ..." বোতামে ক্লিক করুন, ডিগ্রী ডিএলএল ফোল্ডারটি সন্ধান করুন, সমস্ত নির্বাচন করুন " ...\packages\Extended.Wpf.Toolkit.3.5.0\lib\net40\*.dll"

কিছু ডিএলএল সম্পর্কে সতর্কতাগুলি উপেক্ষা করুন এতে ব্যবহারকারীর নিয়ন্ত্রণ থাকতে পারে না!

প্রস্তুত :)


0

আপনার প্রজেক্টের নুগপ্যাকেজ ম্যানেজারে যান-> ব্রাউজ করুন এবং আপনার প্রকল্পে প্যাকেজ ইনস্টল করুন mahApps.Metro -> ইনস্টল করুন search আপনি রেফারেন্স যুক্ত দেখতে পাবেন: MahApps.Metro। তারপরে আপনার মধ্যে এক্সএএমএল কোড যুক্ত করুন:

"xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"

আপনি যেখানে নিজের অবজেক্টটি ব্যবহার করতে চান তা যুক্ত করুন:

<mah:NumericUpDown x:Name="NumericUpDown" ... /> 

বস্তুর সম্পূর্ণ এক্সটেনসিবিলিটি উপভোগ করুন (বাইন্ডিংস, ট্রিগারস এবং আরও অনেক কিছু ...)।

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