У меня есть тестовое окно 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 Warning: 54 : Created BindingExpression (hash=38018250) for Binding (hash=40782967)
System.Windows.Data Warning: 56 : Path: 'DataContext'
System.Windows.Data Warning: 58 : BindingExpression (hash=38018250): Default mode resolved to OneWay
System.Windows.Data Warning: 59 : BindingExpression (hash=38018250): Default update trigger resolved to PropertyChanged
System.Windows.Data Warning: 60 : BindingExpression (hash=38018250): Attach to WpfApplication16.TestObj.Target (hash=39268741)
System.Windows.Data Warning: 62 : BindingExpression (hash=38018250): Use Framework mentor
System.Windows.Data Warning: 65 : BindingExpression (hash=38018250): Resolving source
System.Windows.Data Warning: 67 : BindingExpression (hash=38018250): Framework mentor not found
System.Windows.Data Warning: 63 : BindingExpression (hash=38018250): Resolve source deferred
'WpfApplication16.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework.Aero\v4.0_4.0.0.0__31bf3856ad364e35\PresentationFramework.Aero.dll'
System.Windows.Data Warning: 65 : BindingExpression (hash=38018250): Resolving source
System.Windows.Data Warning: 67 : BindingExpression (hash=38018250): Framework mentor not found
System.Windows.Data Warning: 65 : BindingExpression (hash=38018250): Resolving source (last chance)
System.Windows.Data Warning: 67 : BindingExpression (hash=38018250): Framework mentor not found
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=DataContext; DataItem=null; target element is 'TestObj' (HashCode=39268741); target property is 'Target' (type 'Object')
Возможно ли это связать окна элементов к ресурсам, как это? Или я сделал ошибку с моей привязкой?
Спасибо!
К сожалению, это не работает, он имеет те же обязательные ошибки. В конечном итоге TestObj будет объектом ICommand, который может использовать элементы, не входящие в визуальное дерево (например, элементы контекстного меню), поэтому я пытаюсь привязать к нему элементы окна. – kimewaza
Почему вы не можете просто установить тег в DataContext и получить доступ к этому из контекстного меню? – GazTheDestroyer