Привязка элементов окна к свойствам ресурса - PullRequest
0 голосов
/ 23 января 2012

У меня есть тестовое окно WPF, в этом окне я объявляю ресурс окна и хочу связать текст данных окна с свойством зависимости этого объекта ресурса. Вот мой пример:

<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 (хэш = 38018250) для привязки (хэш = 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): использовать наставника Framework
Предупреждение System.Windows.Data: 65: BindingExpression (хэш = 38018250): разрешающий источник
Предупреждение System.Windows.Data: 67: BindingExpression (hash = 38018250): Ментор фреймворка не найден
Предупреждение System.Windows.Data: 63: BindingExpression (хэш = 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 (хэш = 38018250): источник разрешения
Предупреждение System.Windows.Data: 67: BindingExpression (hash = 38018250): не найден наставник платформы
Предупреждение System.Windows.Data: 65: BindingExpression (хэш = 38018250): источник разрешения (последний шанс)
Предупреждение System.Windows.Data: 67: BindingExpression (hash = 38018250): Ментор фреймворка не найден
Ошибка System.Windows.Data: 2: не удается найти управляющий FrameworkElement или FrameworkContentElement для целевого элемента. BindingExpression: Path = DataContext; DataItem = NULL; целевой элемент - «TestObj» (HashCode = 39268741); Свойство target - 'Target' (тип 'Object')

Можно ли даже привязать элементы окна к таким ресурсам? Или я ошибся с моим переплетом?

Спасибо !!

1 Ответ

0 голосов
/ 23 января 2012

Я не думаю, что вы можете привязать корневой объект к его собственным ресурсам (но не цитируйте меня по этому поводу).Можете ли вы попробовать привязать к ней дочернюю сетку?

<Grid>
    <Grid.Resources>
        <local:TestObj x:Key="MyResObj" Target="{Binding DataContext, diagnostics:PresentationTraceSources.TraceLevel=High}" />
    </Grid.Resources> 
    <TextBox Tag="{StaticResource MyResObj}" />
</Grid>

Я не уверен, что ресурсы даже знают о логическом дереве: /

...