0

在我的 Silverlight 4 应用程序中,我尝试创建一个简单的 UserControl,它将由我的应用程序使用。为了简单起见,它应该有一个“标题”和一个占位符,我想在其中放置任何类型的控件。

<User Control ...>
  <Grid x:Name="LayoutRoot">
    <TextBlock x:Name="TextBlockHeader" Text="{Binding Title}" />
    <ContentPresenter x:Name="ContentPresenterObject" />
  </Grid>
</UserControl>

在后面的代码中,我为 TextBlock 的文本创建了一个属性

public string Title
{
  get { return (string)GetValue(TitleProperty); }
  set { SetValue(TitleProperty, value); }
}

public static readonly DependencyProperty TitleProperty = DependencyProperty.Register("Title", typeof(string), typeof(MyAccordion), null);

这样,当我在应用程序中使用 Control 时,我可以设置 Title 属性。

<local:MyAccordion Title="Test"/>

但似乎,文本块 Text="{Binding Title}" 处的绑定不会使文本“测试”显示为文本块文本。

我的问题是:如何使属性标题显示为文本框文本,以及如何为 - 任何类型的用户控件包含 - contencontrol 执行此操作?

提前致谢,
弗兰克

4

2 回答 2

0

也许控件或页面的 DataContext 没有设置。- 首先,您应该阅读有关绑定的更多信息(“http://www.silverlight.net/learn/data-networking/binding/data-binding-to-controls-(silverlight-quickstart)”)。如果您正在从事实际项目并且将设计一些架构,您应该阅读有关 MVVM 模式的信息。

于 2012-05-23T10:55:05.883 回答
0

答案是 ElementPropertyBinding。我需要在绑定中引用用户控件或在构造函数中添加绑定。

在 XAML 中创建绑定:

<User Control ... x:Name="userControl">
  ...
  <TextBlock x:Name="TextBlockHeader" Text="{Binding Title, ElementName=userControl}" />
</UserControl>

在构造函数中创建绑定(后面的代码)

public MyUserControl()
{
  // Required to initialize variables
  InitializeComponent();

  TextBlockHeader.SetBinding(TextBlock.TextProperty, new System.Windows.Data.Binding() { Source = this, Path = new PropertyPath("Title") });
}

我仍然需要找出如何添加子控件,但这是另一个问题。

于 2012-05-23T15:06:41.133 回答