【问题标题】:Creating Binding from Code-Behind not working C# XAML从代码隐藏创建绑定不起作用 C# XAML
【发布时间】:2016-02-15 12:44:10
【问题描述】:


我有以下代码在代码隐藏中创建绑定。但是,它似乎不起作用(当PageMarginTextBox中的文本被更改时,什么也没有发生,并且当应用程序加载时,newPagePadding没有设置为PageMarginTextBox的文本)。更糟糕的是,根本没有抛出Exceptions。所有元素都已在前面定义。

Binding pageMarginBinding = new Binding
{
    Source = PageMarginTextBox,
    Path = new PropertyPath("Text"),
};
newPage.SetBinding(ContentControl.PaddingProperty, pageMarginBinding);
//PageMarginTextBox.Text determines the Padding of newPage

我该如何解决这个问题?任何解决方案将不胜感激。谢谢!

【问题讨论】:

  • 绑定错误不会出现异常,调试时会在输出窗口中看到绑定错误的详细信息。您可能可以粘贴错误消息以向问题添加更多信息。
  • 抱歉,在任何窗口中都没有提到“绑定”。

标签: c# xaml data-binding


【解决方案1】:

您正在尝试将 PaddingProperty 绑定到文本。填充属性的类型为Thickness,文本属性的类型为String

我不确定你是否要绑定填充/文本,只是给你一个想法,如果你想绑定填充。

Binding pageMarginBinding = new Binding
{
    Source = PageMarginTextBox,
    Path = new PropertyPath("Padding"),
};
newPage.SetBinding(ContentControl.PaddingProperty, pageMarginBinding);

您的问题是因为您试图将string 分配给Thickness。在 XAML 中,编译器在内部将字符串“0,0,2,2”转换为Thickness 对象。但在后面的代码中,你必须自己编写转换代码。

ThicknessConverter myThicknessConverter = new ThicknessConverter();
PageThickness= (Thickness)myThicknessConverter.ConvertFromString(PageMarginTextBox.Text);

然后你必须将它绑定到你的控件。同样,这只是解决方案的一半。您需要将其与 Binding 连接起来。

private Thickness _pageThickness;
public Thickness PageThickness
{
get
 {
   return _pageThickness;
 }
set
 {
  _pageThickness = value;
  NotifyPropertyChanged("PageThickness");
 }

那么你可能可以在 XAML 中绑定它

【讨论】:

  • PageMarginTextBox.Text 决定 newPage 的 Padding。
  • 你能举个例子吗?例如0,-2,2,0
  • @user5719584 这是一个方法需要编写将字符串“0,-2,2,0”(或任何值)转换为实际的@987654329 @对象。
猜你喜欢
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 2014-06-05
  • 2012-07-15
相关资源
最近更新 更多