为了账号安全,请及时绑定邮箱和手机立即绑定

复制一个文本框,包括它的绑定

复制一个文本框,包括它的绑定

C#
MYYA 2021-07-09 14:00:17
我有很多文本框分布在三个单独的 TabItem 上,为了方便起见,我想让用户选择最喜欢的文本框并将它们显示在一个名为“收藏夹”的 tabItem 上。视觉部分工作正常,但我似乎无法让绑定工作,所以新的文本框保持为空。XAML:<StackPanel Grid.Row="3" Grid.Column="0" x:Name="SP_TB_DP_ArticleName"     x:Uid="ArticleName" Style="{StaticResource FavButton}"  MouseDown="FavButton_Click" >   <Label  Content="ArticleName"  Style="{StaticResource Heading2}" />    <Border Background="Transparent">      <StackPanel Orientation="Horizontal">        <Path Uid="FavAdd" Style="{StaticResource Ico-AddFav}" Fill="Black"/>        <Path Uid="FavRem" Style="{StaticResource Ico-RemFav}" Fill="Black" Visibility="Collapsed" />      </StackPanel>     </Border>    </StackPanel><TextBox  x:Name="TB_DP_ArticleName"  Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Style="{StaticResource Heading3}" Text="{Binding Article.Name, UpdateSourceTrigger=PropertyChanged}" />C#的绑定private void FavButton_Click(object sender, MouseButtonEventArgs e){[... creating textbox and label]//BindingName is the name of the original textbox ie: TB_DP_ArticleNameDependencyObject OriginalTB = (DependencyObject) this.FindName(BindingName);BindingBase BB = BindingOperations.GetBindingBase(OriginalTB, TextBox.TextProperty);var oldBind = BB as Binding;//Clone Method from other question Link see below *//BindingBase copyBind= CloneBinding(BB, OriginalTB); if (OriginalTB != null) {  Binding binding = new Binding();  binding.Source = this;  binding.Path = oldBind.Path;  binding.Mode = BindingMode.OneWay;  binding.IsAsync = false;  binding.UpdateSourceTrigger = UpdateSourceTrigger.Default;  binding.TargetNullValue = "null";  BindingOperations.SetBinding(tb, TextBox.TextProperty, binding);  //BindingOperations.SetBinding(tb, TextBox.TextProperty, copyBind); }//Code to add the Textbox to the Grid [...]*) 我尝试了Binding 中的 cloneMethod没有 Clone 方法,这是一种复制它的有效方法, 但它也不起作用。在调试期间oldBind.Path显示到 Article.Name 的正确路径。但最终以编程方式创建的文本框不会显示原始文本框的内容。它只是保持空白。
查看完整描述

2 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

最后我明白了!

我必须将绑定源设置为原始文本框并将绑定设置为文本。这并不能 100% 回答问题,因为这可能不是关于在 WPF保持两个文本框同步中的@AlvinfromDiaspar 评论的最有效解决方案, 但无论如何,它对我的目的来说足够好。

我改变了什么:

Binding binding = new Binding("Text"); binding.Source = (DependencyObject)this.FindName(BindingName);

绑定的整个片段:

String BindingName = inName.Substring(3);


BindingBase BB = BindingOperations.GetBindingBase(

                 (DependencyObject)this.FindName(BindingName),

                 TextBox.TextProperty);


var oldBind = BB as Binding;


if (BB != null)

{

  //the magic goes here

  Binding binding = new Binding("Text");

  binding.Source = (DependencyObject)this.FindName(BindingName);


  binding.Mode = BindingMode.OneWay;

  binding.IsAsync = false;

  binding.UpdateSourceTrigger = UpdateSourceTrigger.Default;

  binding.TargetNullValue = "null";

  BindingOperations.SetBinding(tb, TextBox.TextProperty, binding);

 }


查看完整回答
反对 回复 2021-07-10
  • 2 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信