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}" でのバインディングでは、テキスト「Test」がテキストブロックのテキストとして表示されないようです。

私の質問は次のとおりです。プロパティ タイトルをテキスト ボックスのテキストとして表示するにはどうすればよいですか?

前もってありがとう、
フランク

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 に答える