1

私はSilverlightテンプレートコントロールに取り組んでおり(つまり、Controlから派生し、generic.xamlでControlTemplateとして実装されているように見えます)、バインディングの1つでValueConverterの必要性に遭遇しました。通常は、操作するコントロールのリソースにValueConverterのインスタンスを作成するだけですが、ControlTemplateを使用してそれを行う方法がわかりません。可能であれば、この実装をすべてXamlに保持したいのですが、OnApplyTemplateをオーバーライドして、コンバーターを使用してバインディングを手動で作成できると思います。

4

1 に答える 1

3

これは Silverlight 3 で機能します。コントロール テンプレート内にリソース セクションを追加し、テンプレートのリソースに ValueConverter を追加するだけです。

<ControlTemplate TargetType="controls:MyControl">
    <Grid Margin="8,40,8,20" x:Name="peopleListContainer">        
        <Grid.Resources>
            <controls:MyValueConverter x:Key="converter" />
        </Grid.Resources>
        <!-- ....

ただし、ValueConverters はコントロール テンプレートで誤用されることがよくあります。代わりに TypeConverter を使用することもできます。Bryant Likes は、このシナリオでの ValueConverter と TypeConverter の違いについて論じた優れた記事を書きました。

于 2009-09-09T15:36:19.940 に答える