私は素晴らしいテキストブロック(余分なボタンなど)のように動作するInfoBoxというUserControlを作成しました。それはうまく動作します。 「テキスト」は、依存関係プロパティですWPFの子UserControlにTextBlockまたはインラインのコレクションを渡します
<myNS:InfoBox Text="Some Text"/>
を::
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(InfoBox),
new UIPropertyMetadata(null,ValueChanged));
などのように扱わ:
private static void ValueChanged(DependencyObject dpo,
DependencyPropertyChangedEventArgs args)
{
((InfoBox)dpo).TextBlock.Text = (string)args.NewValue;
}
私はコントロールを追加すると、私はそうのようなブレンドで使用することができますBlendは、Text = "Something"を指定するまで、デザインタイムのサンプルテキストとともに表示されます。この場合、 "Something"が魔法のようにデザイナーに表示されます。完璧!
しかし、私はテキスト以外のものを渡したいと思っています。私はあなたがインラインでテキストブロックを取得するファンキーな機能をすべて使用できるようにしたいと考えています。実行、イタリック体など...
なぜ以下は機能しませんか?
<myNS:InfoBox>
<myNS:InfoBox.ReferenceBlock>
<TextBlock>
<Run Language="en-gb" Text="SampleSample"/><LineBreak/>
<Run Language="en-gb"/><LineBreak/>
<Run Language="en-gb" Text="MoreMoreMore"/>
</TextBlock>
<myNS:InfoBox.ReferenceBlock>
</myNS:InfoBox>
。
public static readonly DependencyProperty ReferenceBlockProperty =
DependencyProperty.Register("ReferenceBlock", typeof(TextBlock),
typeof(InfoBox), new UIPropertyMetadata(null, ReferenceBlockReceived));
[...]
private static void ReferenceBlockReceived(DependencyObject dpo,
DependencyPropertyChangedEventArgs args)
{
var textblock = (TextBlock)args.NewValue;
if (textblock != null)
{
((InfoBox)dpo).TextBlock.Inlines.Clear();
((InfoBox)dpo).TextBlock.Inlines.AddRange(textblock.Inlines);
}
}
何らかの理由でハンドラが受け取ったTextBlockが完全に空です。私はどんな助けにも感謝します。このWPFのものは難しいです!
私は実際にその動作を再現しようとしているのではなく、インスタンスまたはテキストブロックのインスタンスのコピーをコントロールに渡します。なぜこれができないのか分かりませんか?いずれにせよ、私はドットペークを見ます、ありがとう –