将自定义控件内的 TextBlock 绑定到同一自定义控件的依赖属性
Posted
技术标签:
【中文标题】将自定义控件内的 TextBlock 绑定到同一自定义控件的依赖属性【英文标题】:Binding of TextBlock inside Custom Control to dependency property of the same Custom Control 【发布时间】:2010-12-23 17:17:43 【问题描述】:我有一个自定义控件,里面有一个 TextBlock:
<Style TargetType="x:Type local:CustControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="x:Type local:CustControl">
<Border Background="Blue"
Height="26"
Width="26" Margin="1">
<TextBlock x:Name="PART_CustNo"
FontSize="10"
Text="Binding Source=CustControl,Path=CustNo"
Background="PaleGreen"
Height="24"
Width="24"
Foreground="Black">
</TextBlock>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
而且这个自定义控件有一个依赖属性:
public class CustControl : Control
static CustControl()
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustControl), new FrameworkPropertyMetadata(typeof(CustControl)));
public readonly static DependencyProperty CustNoProperty = DependencyProperty.Register("CustNo", typeof(string), typeof(CustControl), new PropertyMetadata(""));
public string CustNo
get return (string)GetValue(CustNoProperty);
set SetValue(CustNoProperty, value);
我希望在自定义控件的每个实例中将“CustNo”属性的值转移到 TextBlock 的“文本”属性中。 但我的:
Text="Binding Source=CustControl,Path=CustNo"
不工作。
不适用于 Path=CustNoProperty:
Text="Binding Source=CustControl,Path=CustNoProperty"
【问题讨论】:
【参考方案1】:你需要一个 TemplateBinding,比如
<TextBlock
Text="Binding RelativeSource=RelativeSource TemplatedParent, Path=CustNo" />
【讨论】:
ps 在 dnrtv.com/default.aspx?showNum=72【参考方案2】:试试这个SO question 的答案。我想你会想要第三个例子。即:
Binding Path=CustNo, RelativeSource=RelativeSource TemplatedParent
【讨论】:
西蒙,谢谢。你的回答就是我所需要的。很抱歉,无法选择几个相同的正确答案,这些答案是在同时被接受的时候发布的。 好吧,我的答案比 Ian 早 2 分钟发布,但您必须当时在场才能注意到。无压力。也许下次……以上是关于将自定义控件内的 TextBlock 绑定到同一自定义控件的依赖属性的主要内容,如果未能解决你的问题,请参考以下文章
设置绑定到 WPF 用户控件内的自定义 DependencyProperty