如何在xaml中动态设置和获取标签

本文关键字:设置 获取 标签 动态 xaml | 更新日期: 2023-09-27 18:10:41

在使用xaml创建GUI时,我创建了一个带有如下标签的文本框:

<TextBox Name="TextBox" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="216,178,143,120" Width="158"
             Tag="myTag"/> 

现在我想让用户能够改变这个标签。为此,我在寻找一种形式函数:

TextBox.SetTag( "User Provided Tag" )

这样标签就可以变成这样了

<TextBox Name="TextBox" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="216,178,143,120" Width="158"
             Tag="User Provided Tag"/> 

在网上搜索了很长一段时间后,我没有提出任何实用的解决方案。有人能帮忙吗?谢谢。

如何在xaml中动态设置和获取标签

可以在两个控件之间使用绑定。假设允许用户输入来自TextBox的标记值。您只需将第二个TextBoxTag绑定到第一个TextBoxText属性:

<TextBox Name="enterTagTextBox" />
<TextBox Name="getTagTextBox" Tag="{Binding ElementName=enterTagTextBox, Path=Text}"/>
为了测试它,我在XAML中添加了一个Button:
<Button Height="25" Click="Button_Click_1"/>
在后面的代码中,我只是检索标签值并像这样显示它:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
    string text = this.getTagTextBox.Tag.ToString();
    global::System.Windows.Forms.MessageBox.Show(text);
}

我认为你的问题可能来自你命名你的文本框,"TextBox"。试着给它起一个不与类名冲突的名字,比如"txtMyTextBox"。

那么你可以这样做,txtMyTextBox.Tag = "User Provided Tag";

或者你可以像PiotrWolkowski建议的那样绑定到它。

然而,我想补充一点,似乎应该有一种更干净的方式来实现你想要的行为。我不知道你想要实现的细节。

我强烈建议创建一个ViewModel(参见:MVVM模式)来保存您希望用户能够编辑的数据。然后使用WPF中的绑定来显示数据。

为了将可扩展应用程序标记语言(Extensible Application Markup Language, XAML)中的Tag属性设置为具有已知内置类型转换器的对象以外的任何对象,例如字符串,您需要使用属性元素用法。