【问题标题】:Why isn't change button content working为什么更改按钮内容不起作用
【发布时间】:2012-02-21 04:52:11
【问题描述】:

我有这个代码:

private void ModifyButton_Click(object sender, RoutedEventArgs e)
{
    ModifyButton.Content = "Another button name";
}

但它不起作用。我的意思是,修改按钮内容不会改变,但程序不会失败或抛出任何异常。

我正在尝试修改按钮名称,以便在同一个按钮中更改其行为(有点编辑/保存)。这不能使用 C#/WPF 吗?

提前致谢。

编辑:

XAML:

<Button Name="ModifyButton" Content="Modificar" Margin="5,10,0,0" Height="23" Width="120" HorizontalAlignment="Left" Click="ModifyButton_Click"></Button>

奇怪的行为:如果我在按钮内容更改后调用 MessageBox.Show,那么,在显示消息框时,按钮会显示新的(更改的)名称,但在关闭消息框后,它显示它的原始文本。

【问题讨论】:

  • 如果您也添加代码的 XAML 部分可能会有所帮助。
  • 绝对有可能。尝试看看您是否可以使用一个小型测试项目来复制它。在事件处理程序的主体中放置一个断点,然后查看您的代码是否到达那里。
  • @Sensei76 我刚刚放了 XAML。 KshitijMehta 代码正在“执行”,我的意思是,调试器调用事件。
  • 你发布的内容对我来说很好。是否还有其他您没有显示的内容,例如后台/调度程序调用、自定义模板等?
  • 您的代码对我有用,如上面粘贴的那样。你的窗口的datacontext设置了吗?

标签: c# wpf


【解决方案1】:

我猜你的 UI 的 XAML 没有绑定到你的按钮的值。你检查数据绑定了吗?

[编辑]

您的魔法信息是您使用ShowDialog()。正如您已经猜到的那样,这会影响您的 UI 线程,从而影响显示行为。 ShowDialog() 将表单显示为 modal 对话框并阻止您的 UI 线程,因此会阻止它的刷新。这可能会导致各种奇怪的行为。

【讨论】:

  • 已绑定。我运行调试器并执行,但 UI 没有改变。
  • 我刚刚在测试项目中尝试了您的示例。对我来说很好。顺便说一句,对不起,根本没有数据绑定。我刚刚在其他 cmets 中读到您在这里不使用 MVVM?如果您正在使用 WPF,我强烈建议您使用 MVVM 来利用 WPF 的功能。
  • 谢谢,你知道我该如何修改这个行为 Sensei76 还是不可能?
  • 这取决于您想要实现的目标。是否可以只使用“Show()”?
  • @RandolfRincón-Fadul 对不起,不知道你的代码很难说。但就像我说的,如果你想使用 WPF,你真的应该使用 MVVM 模式。这将使您的生活变得更加轻松。
【解决方案2】:

这就是我所拥有的并且它有效:

窗口 1

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <Button Name="ModifyButton" Content="Open Dialog" Margin="80,104,78,0" Height="23" Click="ModifyButton_Click" VerticalAlignment="Top"></Button>
    </Grid>
</Window>

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
    }

    private void ModifyButton_Click(object sender, RoutedEventArgs e)
    {
        Window2 win2 = new Window2();
        win2.ShowDialog();
    }
}

窗口 2

<Window x:Class="WpfApplication1.Window2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window2" Height="300" Width="300">
    <Grid>
        <Button Name="ModifyButton" Content="Modificar" Margin="80,104,78,0" Height="23" Click="ModifyButton_Click" VerticalAlignment="Top"></Button>
    </Grid>
</Window>

public partial class Window2 : Window
{
    public Window2()
    {
        InitializeComponent();
    }

    private void ModifyButton_Click(object sender, RoutedEventArgs e)
    {
        ModifyButton.Content = "Another button name";
    }
}

【讨论】:

  • 我也有相同的(使用其他控件等等)。一件特别的事情是我将这个窗口显示为另一个窗口的 ShowDialog()。
  • 如果我使用对话框,仍然对我有用。请参阅上面的更改。也许是时候迈出可信赖的老一步了。如果一切都失败了,请重新启动您的机器。
猜你喜欢
  • 2015-05-27
  • 1970-01-01
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 2011-08-14
相关资源
最近更新 更多