我有一个自定义按钮MyButton
,其Text
属性定义如下:
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(MyButton));
public string Text
{
get { return GetValue(TextProperty) as string; }
set { SetValue(TextProperty, value); }
}
Text
的{{1}}属性绑定到对象的属性:
MyButton
我希望绑定的文字显示在<local:MyButton Text="{Binding Path=SomeString}"/>
TextBlock
内,如何完成此操作?
这是我的第一次不良尝试,修改了setter
MyButton
但后来在wpftutorial.net/DependencyProperties.html
上看到了这个不要向这些属性添加任何逻辑,因为它们仅被调用 从代码中设置属性时。如果您从XAML设置属性 直接调用SetValue()方法。
感谢任何帮助!
更新:是set
{
SetValue(TextProperty, value);
aTextBlock.Text = value.ToString(); //this is bad, from what i read
}
MyButton
如图所示,我尝试绑定<UserControl ...>
<Button HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Viewbox Stretch="Uniform" Grid.Column="0">
<TextBlock x:Name="aTextBlock" Text="{Binding Path=Text}"/>
</Viewbox>
<Viewbox Grid.Column="1">
<TextBlock Text="someText" />
</Viewbox>
</Grid>
</Button>
</UserControl>
的{{1}},但该文字从未显示过;只有&#34; someText&#34;从第1列显示。
按照@Krishna
的建议这样做Text
不会使用错误
进行编译aTextBlock
抱歉,我知道这应该很简单,但还不能让它发挥作用。我没有使用模板进行此控件。谢谢!
答案 0 :(得分:1)
如果Text
属于UserControl
,则您需要更改绑定来源,否则会在当前Text
中查找DataContext
。您可以通过RelativeSource
<TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=Text}"/>
或者给UserControl
一些名字
<UserControl ... x:Name="myUserControl">
然后在绑定中使用ElementName
<TextBlock Text="{Binding ElementName=myUserControl, Path=Text}"/>
答案 1 :(得分:0)