我有一个文本块,其中Text与资源文件绑定,一切正常,但GetBindingExpression总是返回null。还有其他任何绑定方式
<TextBlock x:Name="Slide"
Text="{x:Static prop:Resources.SlideToCollect}"/>
Slide.GetBindingExpression(TextBlock.TextProperty)
答案 0 :(得分:1)
x:静态 - 它不是绑定,也不会创建任何BindingExpression实例。 x:静态 - it is a WPF markup extension,允许您引用以符合CLS的方式定义的任何静态按值代码实体。在您的情况下 - 您从Resource类的Resource.SlideToCollect静态属性(或字段或常量等)获取值,并将其分配给TextBlock的Text属性。
如果您想要使用完全绑定,那么您需要Binding markup extension。 这里是示例代码:
<Window
x:Class="WpfApplication66.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:app="clr-namespace:WpfApplication66"
Title="MainWindow" Height="350" Width="525"
>
<Window.Resources>
<app:Resources x:Key="Resources"/>
</Window.Resources>
<Grid>
<TextBlock x:Name="Slide" Text="{Binding SlideToCollect, Source={StaticResource Resources}}"/>
</Grid>
窗口后面的代码:
public class Resources
{
public string SlideToCollect { get { return "i'am SlideToCollect"; } }
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
BindingExpression be = Slide.GetBindingExpression(TextBlock.TextProperty);
}
}
现在,变量“be”将分配BindingExpression类的实例。不要忘记用项目名称替换WpfApplication66;)