当文本从资源文件绑定时,TextBlock GetBindingExpression变为空

时间:2015-04-10 06:50:04

标签: c# wpf

我有一个文本块,其中Text与资源文件绑定,一切正常,但GetBindingExpression总是返回null。还有其他任何绑定方式

<TextBlock x:Name="Slide"                       
Text="{x:Static prop:Resources.SlideToCollect}"/>

Slide.GetBindingExpression(TextBlock.TextProperty)

1 个答案:

答案 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;)