Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF中访问类属性以使用RichTextBox进行数据绑定_C#_Wpf_Richtextbox - Fatal编程技术网

C# 在WPF中访问类属性以使用RichTextBox进行数据绑定

C# 在WPF中访问类属性以使用RichTextBox进行数据绑定,c#,wpf,richtextbox,C#,Wpf,Richtextbox,我目前正在尝试将一个带有多个文本框的wpf表单转换为RichTextBox,以实现更好的编辑功能。在导航到页面时,原始文本框都使用数据绑定到数据上下文链接到底层存储类 public class Storage { public String IntroFormText { get; set; } public String MainFormText { get; set; } } public partial class DataEntryPage : BasePage { pri

我目前正在尝试将一个带有多个文本框的wpf表单转换为RichTextBox,以实现更好的编辑功能。在导航到页面时,原始文本框都使用数据绑定到数据上下文链接到底层存储类

public class Storage
{
  public String IntroFormText { get; set; }
  public String MainFormText { get; set; }
}

public partial class DataEntryPage : BasePage
{
  private Storage _storage { get; set; }

  public override NavigatingTo(object data, object savedState)
  {
    DataContext = _storage;
  } 

}
最初,文本框中的绑定只需通过数据上下文遍历并链接到存储类,如下所示

<TextBox
  Name="IntroText"
  Text="{Binding IntroFormText}
  SpellCheck.IsEnabled="True" />
但是,我在这里遇到的问题是,它需要链接的属性位于存储类中,而不是DataEntryPage类中。有没有办法让DependencyProperty有效地绑定到存储类属性(就像TextBox自动绑定的那样),或者我必须为这种行为编写某种黑客攻击的替代品?我想我需要重载DataEntryPage类内部Storage.Properties类的getter/setter,以允许它正确地指向DependencyProperty


由于系统的性质,不幸的是,删除数据上下文绑定系统并不是一个真正的选项(而且我没有权限对设计进行如此大的修改!)。希望这对以前遇到过这个问题的人来说是有意义的

如果您已经在使用一个控件,该控件将Document属性设置为DependencyProperty,则无需为绑定源声明另一个属性。只有绑定的目标(在本例中为文档)需要是DP。如果控件编写正确,您应该能够使用与文本框相同的绑定,前提是该字符串的内容将为您的StringToxamConverter提供适当的输入以生成流文档


我希望这不是您的实际代码,但如果是,您的DP声明(在本例中不需要)有许多错误。DPs需要有一个非常具体的格式,才能使其声明正常工作。通常最好使用代码段为您生成它,特别是如果您对所有部分之间的相互关系没有充分的了解。

如果您已经在使用一个控件,该控件将文档属性设置为从属属性,则无需为绑定源声明另一个属性。只有绑定的目标(在本例中为文档)需要是DP。如果控件编写正确,您应该能够使用与文本框相同的绑定,前提是该字符串的内容将为您的StringToxamConverter提供适当的输入以生成流文档


我希望这不是您的实际代码,但如果是,您的DP声明(在本例中不需要)有许多错误。DPs需要有一个非常具体的格式,才能使其声明正常工作。通常最好使用代码段为您生成它,特别是如果您对所有部分之间的相互关系没有深入的了解。

这确实不是我的确切代码,更多的是一个较大代码库的摘要/子集。最后,经过进一步的讨论,事实证明不再使用数据绑定更简单。我知道你是从哪里来的依赖财产的东西,我想在一天结束时,我只是没有一个很好的理解它,以使用它真正灵活和有效的足够这个项目。不过,这个想法让我很感兴趣,这肯定是我将来会进一步研究的东西!一篇关于定制DP材料的像样的文章将很好地为将来的参考找到MSDN文章()实际上是一篇非常好的概述。我只想从“设置属性值”的前几节开始。这确实不是我的确切代码,更多的是一个相当大的代码库的摘要/子集。最后,经过进一步的讨论,事实证明不再使用数据绑定更简单。我知道你是从哪里来的依赖财产的东西,我想在一天结束时,我只是没有一个很好的理解它,以使用它真正灵活和有效的足够这个项目。不过,这个想法让我很感兴趣,这肯定是我将来会进一步研究的东西!一篇关于定制DP材料的像样的文章将很好地为将来的参考找到MSDN文章()实际上是一篇非常好的概述。我会坚持从“设置属性值”的前几节开始。
<Utils:BindableRichTextBox
  x:Name="IntroductionText"
  Document="{Binding {Path=IntroFormText, ElementName=dataEntryPage, Mode=TwoWay, Converter={StaticResource StringToXamlConverter}}"
  SpellCheck.IsEnabled="True" />
private static readonly DependencyProperty introProperty = DependencyProperty.Register("IntroFormText", typeof(string), typeof(Storage));

public string IntroFormText
{
  get { return (string) GetValue(DocumentProperty); }
  set { SetValue(DocumentProperty, value); }
}