【问题标题】:Switch the button content切换按钮内容
【发布时间】:2011-10-05 09:17:03
【问题描述】:

你好我需要帮助来切换两个按钮的内容

到目前为止我所做的是检查按钮是否是邻居。

private int row = 4;
private int col = 4;

public MainWindow()
{

}

private void Button_Click(object sender, RoutedEventArgs e)
{
    Button cmd = (Button)sender;
    MessageBox.Show(cmd.Tag.ToString());
    string txt = cmd.Tag.ToString();
    int r = int.Parse("" + txt[0]);
    int c = int.Parse("" + txt[1]);
    if (Math.Abs(r - row) + Math.Abs(c - col) == 1)
    {
        MessageBox.Show(r + "  " + c);
    }

我的 XAML 文件中的按钮是这样的

<Button Tag="00" Grid.Row="0" Grid.Column="0" Click="Button_Click">A</Button>
<Button Tag="01" Grid.Row="0" Grid.Column="1" Click="Button_Click">B</Button>

挑战是切换内容(A和B)

谁能帮我解决这个问题?

【问题讨论】:

  • 某处 WPF 小猫死了。请查看卡雷尔的答案。切换按钮模型应该是轻而易举的事。

标签: c# wpf xaml


【解决方案1】:
  1. 不要使用类似Button_Click 方法的WinForms 事件处理。
  2. 对按钮内容使用绑定
  3. 查看命令
  4. 看看 MVVM 方法

【讨论】:

    【解决方案2】:

    只需使用一个临时变量来保存其中一个字符串。

    string tmp = Button1.Text;
    Button1.Text = Button2.Text;
    Button2.Text = tmp;
    

    【讨论】:

      【解决方案3】:

      我会跳过通用事件处理程序名称。您需要将要移动到的按钮存储在临时变量中。

      【讨论】:

        【解决方案4】:

        我用了九个按钮:

                <Button Tag="00" Grid.Row="0" Grid.Column="0" Margin="15,21,13,23" Name="btn1" Click="btn1_Click">A</Button>
                <Button Tag="01" Grid.Row="0" Grid.Column="1" Margin="15,21,13,23" Name="btn2" Click="btn1_Click">B</Button>
                <Button Tag="02" Grid.Row="0" Grid.Column="2" Margin="15,21,13,23" Name="btn3" Click="btn1_Click">C</Button>
                <Button Tag="10" Grid.Row="1" Grid.Column="0" Margin="15,21,13,23" Name="btn4" Click="btn1_Click">D</Button>
                <Button Tag="11" Grid.Row="1" Grid.Column="1" Margin="15,21,13,23" Name="btn5" Click="btn1_Click">E</Button>
                <Button Tag="12" Grid.Row="1" Grid.Column="2" Margin="15,21,13,23" Name="btn6" Click="btn1_Click">F</Button>
                <Button Tag="20" Grid.Row="2" Grid.Column="0" Margin="15,21,13,23" Name="btn7" Click="btn1_Click">G</Button>
                <Button Tag="21" Grid.Row="2" Grid.Column="1" Margin="15,21,13,23" Name="btn8" Click="btn1_Click">H</Button>
                <Button Tag="22" Grid.Row="2" Grid.Column="2" Margin="15,21,13,23" Name="btn9" Click="btn1_Click">I</Button>
        

        以及从网格中获取按钮并更改值的此方法:

        private int row = 2;
            private int col = 2;
        
            private void btn1_Click(object sender, RoutedEventArgs args)
            {
                Button cmd = (Button)sender;
                string txt = cmd.Tag.ToString();
                int r = int.Parse("" + txt[0]);
                int c = int.Parse("" + txt[1]);
                if (Math.Abs(r - row) + Math.Abs(c - col) == 1)
                {
                    MessageBox.Show(r + "  " + c);
                    Button nearButton = grd1.Children.Cast<Button>().First(e => Grid.GetRow(e) == row && Grid.GetColumn(e) == col);
                    Object tmp = nearButton.Content;
                    nearButton.Content = cmd.Content;
                    cmd.Content = tmp;
                }
            }
        

        在我的示例中,指定旁边的两个按钮会随之更改其值,希望这是您想要的。

        (从here 窃取通过 X 和 Y 从网格中获取项目)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-31
          • 2014-05-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多