Передача текстового поля в качестве параметра из Xaml в событие нажатия кнопки - PullRequest
0 голосов
/ 01 мая 2019

У меня есть несколько текстовых полей, которые будут содержать значение по умолчанию 10, каждое поле имеет две кнопки рядом с ними, они должны использоваться для увеличения значений текстового поля на 1 или уменьшения на один после нажатия.Я действительно знаю, что мог бы просто сделать обработчик события щелчка для каждой кнопки, но вместо этого я хотел бы сделать так, чтобы вместо этого метод мог найти указанное текстовое поле, возможно, передав его из xaml.Простите, если это очевидно, как это сделать, но я в замешательстве.

Я связывался, но не могу понять, как это использовать, чтобы заставить его работать.

<Grid Background="DarkMagenta" Margin="0,0,0,-31">
    <StackPanel Orientation="Vertical" HorizontalAlignment="Center" Margin="0,10, 0, 20">
        <Label>Set Your Stats!</Label>
        <StackPanel Orientation="Vertical" HorizontalAlignment="Left">
            <Label>Strenght</Label>
            <StackPanel Orientation="Horizontal">
                <TextBox  Margin="10,10,2,10" MinHeight="10" MaxHeight="20" MinWidth="15" MaxWidth="20">10</TextBox>
                <StackPanel Orientation="Vertical" VerticalAlignment="Center">
                    <Button Click="Button_Click">+</Button>
                    <Button>-</Button>
                </StackPanel>

            </StackPanel>
            <Label>Dexterity</Label>
            <StackPanel Orientation="Horizontal">
                <TextBox  Margin="10,10,2,10" MinHeight="10" MaxHeight="20" MinWidth="15" MaxWidth="20">10</TextBox>
                <StackPanel Orientation="Vertical" VerticalAlignment="Center">
                    <Button>+</Button>
                    <Button>-</Button>
                </StackPanel>
            </StackPanel>

            <Label>Constitution</Label>
            <StackPanel Orientation="Horizontal">
                <TextBox  Margin="10,10,2,10" MinHeight="10" MaxHeight="20" MinWidth="15" MaxWidth="20">10</TextBox>
                <StackPanel Orientation="Vertical" VerticalAlignment="Center">
                    <Button>+</Button>
                    <Button>-</Button>
                </StackPanel>
            </StackPanel>

            <Label>Intelligence</Label>
            <StackPanel Orientation="Horizontal">
                <TextBox  Margin="10,10,2,10" MinHeight="10" MaxHeight="20" MinWidth="15" MaxWidth="20">10</TextBox>
                <StackPanel Orientation="Vertical" VerticalAlignment="Center">
                    <Button>+</Button>
                    <Button>-</Button>
                </StackPanel>
            </StackPanel>

            <Label>Wisdom</Label>
            <StackPanel Orientation="Horizontal">
                <TextBox  Margin="10,10,2,10" MinHeight="10" MaxHeight="20" MinWidth="15" MaxWidth="20">10</TextBox>
                <StackPanel Orientation="Vertical" VerticalAlignment="Center">
                    <Button>+</Button>
                    <Button>-</Button>
                </StackPanel>
            </StackPanel>

            <Label>Charisma</Label>
            <StackPanel Orientation="Horizontal">
                <TextBox  Margin="10,10,2,10" MinHeight="10" MaxHeight="20" MinWidth="15" MaxWidth="20">10</TextBox>
                <StackPanel Orientation="Vertical" VerticalAlignment="Center">
                    <Button>+</Button>
                    <Button>-</Button>
                </StackPanel>
            </StackPanel>
        </StackPanel>
        <Button HorizontalAlignment="Stretch" Margin="80,0,80,0" >Continue</Button>

    </StackPanel>

CS.Файловый метод

public partial class StatSelection : Page
{
    CharacterDetails charDetails = new CharacterDetails();
    public StatSelection(CharacterDetails addedDetails)
    {
        charDetails = addedDetails;
        InitializeComponent();
    }

    private void IncrementBy1(object sender, RoutedEventArgs e)
    {
        // code for incrementing the textbox by 1
    }
}

Я бы хотел, чтобы у метода был один или два метода, которые находят нужное текстовое поле для увеличения на основе того, какое текстовое поле передается методу при каждом его вызове.

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

Спасибо пользователю 2818985 и Nawed Nabi Zada ​​за ваши ответы. Используя ваш совет, я нашел способ использовать только одно событие нажатия для всех кнопок!

  <Grid Background="DarkMagenta" Margin="0,0,0,-31">
    <StackPanel Orientation="Vertical" HorizontalAlignment="Center" Margin="0,10, 0, 20">
        <Label>Set Your Stats!</Label>
        <StackPanel Orientation="Vertical" HorizontalAlignment="Left">
            <Label>Strenght</Label>
            <StackPanel Orientation="Horizontal">
                <TextBox x:Name="StrTxtBx"  Margin="10,10,2,10" MinHeight="10" MaxHeight="20" MinWidth="15" MaxWidth="20">10</TextBox>
                <StackPanel Orientation="Vertical" VerticalAlignment="Center">
                    <Button x:Name="StrIncrease" Click="IncreaseDecrease">+</Button>
                    <Button x:Name="StrDecrease" Click="IncreaseDecrease">-</Button>
                </StackPanel>

            </StackPanel>
            <Label>Dexterity</Label>
            <StackPanel Orientation="Horizontal">
                <TextBox x:Name="DexTxtBx"  Margin="10,10,2,10" MinHeight="10" MaxHeight="20" MinWidth="15" MaxWidth="20">10</TextBox>
                <StackPanel Orientation="Vertical" VerticalAlignment="Center">
                    <Button x:Name="DexIncrease" Click="IncreaseDecrease">+</Button>
                    <Button x:Name="DexDecrease" Click="IncreaseDecrease">-</Button>
                </StackPanel>
            </StackPanel>

            <Label>Constitution</Label>
            <StackPanel Orientation="Horizontal">
                <TextBox x:Name="ConTxtBx"  Margin="10,10,2,10" MinHeight="10" MaxHeight="20" MinWidth="15" MaxWidth="20">10</TextBox>
                <StackPanel Orientation="Vertical" VerticalAlignment="Center">
                    <Button x:Name="ConIncrease" Click="IncreaseDecrease">+</Button>
                    <Button x:Name="ConDecrease" Click="IncreaseDecrease">-</Button>
                </StackPanel>
            </StackPanel>

            <Label>Intelligence</Label>
            <StackPanel Orientation="Horizontal">
                <TextBox x:Name="IntTxtBx"  Margin="10,10,2,10" MinHeight="10" MaxHeight="20" MinWidth="15" MaxWidth="20">10</TextBox>
                <StackPanel Orientation="Vertical" VerticalAlignment="Center">
                    <Button x:Name="IntIncrease" Click="IncreaseDecrease">+</Button>
                    <Button x:Name="IntDecrease" Click="IncreaseDecrease">-</Button>
                </StackPanel>
            </StackPanel>

            <Label>Wisdom</Label>
            <StackPanel Orientation="Horizontal">
                <TextBox x:Name="WisTxtBx" Margin="10,10,2,10" MinHeight="10" MaxHeight="20" MinWidth="15" MaxWidth="20">10</TextBox>
                <StackPanel Orientation="Vertical" VerticalAlignment="Center">
                    <Button x:Name="WisIncrease" Click="IncreaseDecrease">+</Button>
                    <Button x:Name="WisDecrease" Click="IncreaseDecrease">-</Button>
                </StackPanel>
            </StackPanel>

            <Label>Charisma</Label>
            <StackPanel Orientation="Horizontal">
                <TextBox x:Name="ChrTxtBx" Margin="10,10,2,10" MinHeight="10" MaxHeight="20" MinWidth="15" MaxWidth="20">10</TextBox>
                <StackPanel Orientation="Vertical" VerticalAlignment="Center">
                    <Button x:Name="ChrIncrease" Click="IncreaseDecrease">+</Button>
                    <Button x:Name="ChrDecrease" Click="IncreaseDecrease">-</Button>
                </StackPanel>
            </StackPanel>
        </StackPanel>
        <Button HorizontalAlignment="Stretch" Margin="80,0,80,0" >Continue</Button>

    </StackPanel>

</Grid>

Код Cs

  private void IncreaseDecrease(object sender, RoutedEventArgs e)
    {
        string btnName = ((Button)sender).Name;
        int TxtBxVal;
        switch(btnName)
        {
            case "StrIncrease":
                TxtBxVal = int.Parse(StrTxtBx.Text);
                StrTxtBx.Text = (++TxtBxVal).ToString();
                break;

            case "StrDecrease":
                TxtBxVal = int.Parse(StrTxtBx.Text);
                StrTxtBx.Text = (--TxtBxVal).ToString();
                break;

            case "DexIncrease":
                TxtBxVal = int.Parse(DexTxtBx.Text);
                DexTxtBx.Text = (++TxtBxVal).ToString();
                break;

            case "DexDecrease":
                TxtBxVal = int.Parse(DexTxtBx.Text);
                DexTxtBx.Text = (--TxtBxVal).ToString();
                break;

            case "ConIncrease":
                TxtBxVal = int.Parse(ConTxtBx.Text);
                ConTxtBx.Text = (++TxtBxVal).ToString();
                break;

            case "ConDecrease":
                TxtBxVal = int.Parse(ConTxtBx.Text);
                ConTxtBx.Text = (--TxtBxVal).ToString();
                break;

            case "IntIncrease":
                TxtBxVal = int.Parse(IntTxtBx.Text);
                IntTxtBx.Text = (++TxtBxVal).ToString();
                break;

            case "IntDecrease":
                TxtBxVal = int.Parse(IntTxtBx.Text);
                IntTxtBx.Text = (--TxtBxVal).ToString();
                break;

            case "WisIncrease":
                TxtBxVal = int.Parse(WisTxtBx.Text);
                WisTxtBx.Text = (++TxtBxVal).ToString();
                break;

            case "WisDecrease":
                TxtBxVal = int.Parse(WisTxtBx.Text);
                WisTxtBx.Text = (--TxtBxVal).ToString();
                break;

            case "ChrIncrease":
                TxtBxVal = int.Parse(ChrTxtBx.Text);
                ChrTxtBx.Text = (++TxtBxVal).ToString();
                break;

            case "ChrDecrease":
                TxtBxVal = int.Parse(ChrTxtBx.Text);
                ChrTxtBx.Text = (--TxtBxVal).ToString();
                break;
        }

    }

При этом коробка увеличивается и уменьшается по мере необходимости.
Возможно, в будущем мы попытаемся урезать его, но сейчас я доволен этим. Еще раз спасибо вам обоим!

0 голосов
/ 01 мая 2019

Вы можете попробовать следующий код, который находит текстовое поле, связанное с кнопкой, и увеличивает значение на 1.

private void IncrementBy1(object sender, RoutedEventArgs e)
    {
        // code for incrementing the textbox by 1
        Button btn = sender as Button;

        var parent = VisualTreeHelper.GetParent(VisualTreeHelper.GetParent(btn));
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
        {
            var textBox = VisualTreeHelper.GetChild(parent, i) as TextBox;
            if (textBox != null)
            {
                var value = int.Parse(textBox.Text);
                textBox.Text = (++value).ToString();
                break;
            }
        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...