如何在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"/>
在网上搜索了很长一段时间后,我没有提出任何实用的解决方案。有人能帮忙吗?谢谢。
可以在两个控件之间使用绑定。假设允许用户输入来自TextBox
的标记值。您只需将第二个TextBox
的Tag
绑定到第一个TextBox
的Text
属性:
<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属性设置为具有已知内置类型转换器的对象以外的任何对象,例如字符串,您需要使用属性元素用法。