我有一个自定义按钮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
属性MyButton
绑定到对象的属性:
<local:MyButton Text="{Binding Path=SomeString}"/>
我想将绑定文本显示在TextBlock
里面MyButton
,如何做到这一点?
这是我第一次的错误尝试,修改了二传手
set
{
SetValue(TextProperty, value);
aTextBlock.Text = value.ToString(); //this is bad, from what i read
}
但随后在wpftutorial.net/DependencyProperties.html上看到了
不要向这些属性添加任何逻辑,因为仅当您通过代码设置属性时才调用它们。如果从XAML设置属性,则直接调用SetValue()方法。
任何帮助表示赞赏!
更新:以下是xaml用于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>
如图所示,我试图绑定Text
的aTextBlock
,但文字一直没有出现; 仅显示第1列中的“ someText”。
按照@Krishna的建议进行此操作
<TextBlock x:Name="aTextBlock" Text="{TemplateBinding Text}"/>
不会与错误一起编译
The member "Text" is not recognized or is not accessible.
抱歉,我知道这应该很简单,但是还无法正常工作。我没有为此控件使用模板。谢谢!
如果Text
是的属性,UserControl
则需要更改绑定源,否则它将Text
在current中寻找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}"/>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句