将 ControlTemplate 子项绑定到自定义控件上的 DependencyProperty 不起作用
Binding ControlTemplate child to DependencyProperty on a custom control not working
我的用户控件如下所示:
<UserControl.Resources>
<Style TargetType="TextBox" x:Key="ExtendeTextBoxStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Grid>
<TextBlock Grid.Row="3" Text="{Binding ErrorMessage, RelativeSource={RelativeSource TemplatedParent}}" x:Name="ErrorMessage" Foreground="Red" ></TextBlock>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid>
<TextBox x:Name="textbox" Style="{StaticResource ExtendeTextBoxStyle}" ></TextBox>
</Grid>
代码隐藏
public string ErrorMessage
{
get { return (string)GetValue(ErrorMessageProperty); }
set { SetValue(ErrorMessageProperty, value); }
}
// Using a DependencyProperty as the backing store for ErrorMessage. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ErrorMessageProperty =
DependencyProperty.Register("ErrorMessage", typeof(string), typeof(CustomControl), new PropertyMetadata("x"));
现在在我的主页中,我正尝试像这样传递 ErrorMessage
的值
<local:CustomControl ErrorMessage="My Error message"></local:CustomControl>
我觉得一切都很好,但 ErrorMessage
值没有显示。我在这里错过了什么?
我的完整申请可以here检查。
RelativeSource TemplatedParent
是错误的,因为 ErrorMessage
不是模板化文本框的 属性。
像这样使用 ElementName 绑定
<UserControl x:Name="self" ...>
<TextBlock Text="{Binding ErrorMessage, ElementName=self}" .../>
通常 ControlTemplate 中的绑定是像
这样的模板绑定
<TextBlock Text="{TemplateBinding Text}" .../>
您可以将样式文本框的文本 属性 设置为
<TextBox Style="{StaticResource ExtendeTextBoxStyle}"
Text="{Binding ErrorMessage, ElementName=self}" .../>
我的用户控件如下所示:
<UserControl.Resources>
<Style TargetType="TextBox" x:Key="ExtendeTextBoxStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Grid>
<TextBlock Grid.Row="3" Text="{Binding ErrorMessage, RelativeSource={RelativeSource TemplatedParent}}" x:Name="ErrorMessage" Foreground="Red" ></TextBlock>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid>
<TextBox x:Name="textbox" Style="{StaticResource ExtendeTextBoxStyle}" ></TextBox>
</Grid>
代码隐藏
public string ErrorMessage
{
get { return (string)GetValue(ErrorMessageProperty); }
set { SetValue(ErrorMessageProperty, value); }
}
// Using a DependencyProperty as the backing store for ErrorMessage. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ErrorMessageProperty =
DependencyProperty.Register("ErrorMessage", typeof(string), typeof(CustomControl), new PropertyMetadata("x"));
现在在我的主页中,我正尝试像这样传递 ErrorMessage
的值
<local:CustomControl ErrorMessage="My Error message"></local:CustomControl>
我觉得一切都很好,但 ErrorMessage
值没有显示。我在这里错过了什么?
我的完整申请可以here检查。
RelativeSource TemplatedParent
是错误的,因为 ErrorMessage
不是模板化文本框的 属性。
像这样使用 ElementName 绑定
<UserControl x:Name="self" ...>
<TextBlock Text="{Binding ErrorMessage, ElementName=self}" .../>
通常 ControlTemplate 中的绑定是像
这样的模板绑定<TextBlock Text="{TemplateBinding Text}" .../>
您可以将样式文本框的文本 属性 设置为
<TextBox Style="{StaticResource ExtendeTextBoxStyle}"
Text="{Binding ErrorMessage, ElementName=self}" .../>