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

时间:2014-06-27 08:31:33

标签: c# wpf xaml

使用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"/> 

在网上搜索了一段时间后,我没有想出任何实际的解决方案。有人可以帮忙吗?谢谢。

3 个答案:

答案 0 :(得分:2)

您可以使用两个控件之间的绑定。假设允许用户输入TextBox的标记值。您只需将第二个Tag的{​​{1}}绑定到第一个TextBox的{​​{1}}属性:

Text

为了测试它我在我的XAML中添加了TextBox

<TextBox Name="enterTagTextBox" />
<TextBox Name="getTagTextBox" Tag="{Binding ElementName=enterTagTextBox, Path=Text}"/>

在后面的代码中,我只需检索标记值并显示如下:

Button

答案 1 :(得分:2)

我认为您的问题可能源于您命名TextBox,&#34; TextBox&#34;。尝试给它一个不与类名冲突的名称,例如&#34; txtMyTextBox&#34;。

然后你可以做txtMyTextBox.Tag = "User Provided Tag";

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

但是,我想补充一点,似乎应该有一种更清洁的方式来实现你想要的行为。需要注意的是,我不知道您要实施的细节。

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

答案 2 :(得分:1)

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