0

Windows Phone での開発について 2 つの質問があります。

カスタム コントロールを作成し、その中に追加の XAML を提供できるようにしたいと考えています。だから私はContentControlinsideContentPresenterを使いますControlTemplate

<ContentControl>
    <ControlTemplate>
        <TextBlock Name="TextBlockControl" Text="Existing controls"/>
        <ContentPresenter/>
    </ControlTemplate>
</ContentControl>

うまくいきましたが、分離コードからTextBlockControl内部にアクセスできません。常に null を返します。ControlTemplateFindName

次に、Control に属性を提供したいので、次のように DependencyProperty を作成します。

public string CustomText
{
    get { return (string)GetValue(CustomTextProperty); }
    set
    {
        SetValue(CustomTextProperty, value);
        TextBlockControl.Text = value;
    }
}

public static readonly DependencyProperty CustomTextProperty =
    DependencyProperty.Register("CustomText", typeof(string), typeof(MyControl), null);

ご覧のとおりTextBlockControl.Text = value;、コントロール内の TextBlock にテキストを設定するように記述しています。静的文字列を設定すると動作します

<MyControl CustomText="Static Text"/>

しかし、私が使いたいときBinding(例えばLocalizedStringsリソースのために) - それはうまくいきません。PropertyMeta コールバックまたは IPropertyChanged の継承がありませんか? 同じ問題で大量の StackOverflow の質問を読みましたが、質問に対する回答はありませんでした。

4

1 に答える 1

2

最初の質問への答え:

カスタム コントロールを作成し、テンプレートを割り当てると、以下を使用してそのテンプレート内の要素にアクセスできます。

[TemplatePart(Name = "TextBlockControl", Type = typeof(FrameworkElement))]

この属性をブレンドなどのツールに配置する必要があります。このカスタム コントロールのテンプレートには、TextBlockControl というテキストブロックが必要です。次に、コントロールの OnApplyTemplate から、それへの参照を取得する必要があります。

 protected override void OnApplyTemplate()
    {
        _part1 = this.GetTemplateChild("TextBlockControl") as FrameworkElement;
        base.OnApplyTemplate();
    }
于 2013-11-06T12:47:37.663 に答える