次のように使用したいユーザーコントロールがあります。
// MainPage.xaml
<my:MyControl Data="10" />
<!-- or -->
<my:MyControl Data="{Binding SomeData}" />
コードバインドは次のとおりです。
public partial class MyControl : UserControl
{
public MyControl() {
InitializeComponent();
}
public const string DataPropertyName = "Data";
public int Data
{
get
{
return (int)GetValue(DataProperty);
}
set
{
SetValue(DataProperty, value);
}
}
public static readonly DependencyProperty DataProperty = DependencyProperty.Register(
DataPropertyName,
typeof(int),
typeof(MyControl),
new PropertyMetadata(10);
}
xaml の部分は次のとおりです。
<UserControl>
<!-- omitted namespaces etc. -->
<Grid x:Name="LayoutRoot">
<Button x:Name="myButton" Content="{Binding Data}">
<Button.Style>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<TextBlock Text="{TemplateBinding Content}" />
</ControlTemplate>
</Setter.Value>
</Button.Style>
</Button>
</Grid>
</UserControl>
ユーザーコントロールの xaml 部分の重要な行は次のとおりです。
<Button x:Name="myButton" Content="{Binding Data}">
外部から値を設定する機能を保持しながら、このボタンのコンテンツ プロパティをユーザー コントロールのプロパティ (データ) にバインドしたいと思います ( <my:MyControl Data="10" />
)
問題は、バインディングを使用すると--<Button x:Name="myButton" Content="{Binding Data}">
機能しないことです(テンプレートバインディングは値を選択しません)ただし、値を手動で設定すると機能します-<Button x:Name="myButton" Content="12">