我有一个WPF测试窗口,在该窗口中我声明了一个窗口资源,我希望将窗口的datacontext绑定到该资源对象上的依赖属性。这是我的例子:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:local="clr-namespace:WpfApplication1"
xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"
>
<Window.Resources>
<local:TestObj x:Key="MyResObj" Target="{Binding DataContext, diagnostics:PresentationTraceSources.TraceLevel=High}" />
</Window.Resources>
<Grid>
<TextBox Tag="{StaticResource MyResObj}" />
</Grid>
</Window>
和背后的代码:
public partial class MainWindow : Window
{
public MainWindow()
{
this.DataContext = this;
InitializeComponent();
}
}
这是我的TestObj:
namespace WpfApplication1
{
public class TestObj : DependencyObject
{
public static readonly DependencyProperty TargetProperty = DependencyProperty.Register("Target", typeof(object), typeof(TestObj));
public object Target
{
get { return this.GetValue(TargetProperty); }
set { SetValue(TargetProperty, value); }
}
}
}
这是一个简化的例子,我想最终将更复杂的东西从窗口绑定到Window.Resources部分中声明的项目。目前这没有按照我的预期工作,因此我启用了详细的绑定日志记录 - 我得到的绑定错误是
System.Windows.Data警告:54:为绑定创建BindingExpression(hash = 38018250)(hash = 40782967)
System.Windows.Data警告:56:路径:'DataContext'
System.Windows.Data警告:58:BindingExpression(hash = 38018250):默认模式已解决为OneWay
System.Windows.Data警告:59:BindingExpression(hash = 38018250):解析为PropertyChanged的默认更新触发器
System.Windows.Data警告:60:BindingExpression(hash = 38018250):附加到WpfApplication16.TestObj.Target(hash = 39268741)
System.Windows.Data警告:62:BindingExpression(hash = 38018250):使用框架导师
System.Windows.Data警告:65:BindingExpression(hash = 38018250):解析源
System.Windows.Data警告:67:BindingExpression(hash = 38018250):找不到框架导师
System.Windows.Data警告:63:BindingExpression(hash = 38018250):解析源延迟
'WpfApplication16.vshost.exe'(托管(v4.0.30319)):已加载'C:\ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ PresentationFramework.Aero \ v4.0_4.0.0.0__31bf3856ad364e35 \ PresentationFramework.Aero.dll'<登记/> System.Windows.Data警告:65:BindingExpression(hash = 38018250):解析源
System.Windows.Data警告:67:BindingExpression(hash = 38018250):找不到框架导师
System.Windows.Data警告:65:BindingExpression(hash = 38018250):解析源(最后机会)
System.Windows.Data警告:67:BindingExpression(hash = 38018250):找不到框架导师
System.Windows.Data错误:2:找不到目标元素的管理FrameworkElement或FrameworkContentElement。 BindingExpression:路径= DataContext的;的DataItem = NULL; target元素是'TestObj'(HashCode = 39268741); target属性是'Target'(类型'Object')
甚至可以将窗口项绑定到这样的资源吗?或者我的绑定错误了吗?
谢谢!
答案 0 :(得分:0)
我认为你不能在自己的资源中绑定到根对象(但不要引用它)。您可以尝试将子网格绑定到它吗?
<Grid>
<Grid.Resources>
<local:TestObj x:Key="MyResObj" Target="{Binding DataContext, diagnostics:PresentationTraceSources.TraceLevel=High}" />
</Grid.Resources>
<TextBox Tag="{StaticResource MyResObj}" />
</Grid>
我不确定资源是否知道逻辑树:/