Вопрос: Используя XAML, как вы можете установить вложенное свойство непосредственно в окне, когда значение является комплексным значением?
Объяснение:
Обратите внимание, что для краткости я удалил часть кода XAML здесь и там.
Я пытаюсь установить свойство Attached непосредственно в окне WPF.Обычно его можно установить как свойство окна следующим образом:
<Window
xmlns:data="clr-namespace:MVVM_Test.Data"
data:AttachedProperties.RegisterCommandBindings="somevalue" />
Это хорошо, если для свойства требуется только простое значение (или даже простая привязка).Однако я хочу установить для присоединенного свойства комплексное значение, используя MultiBinding.У меня это работает, когда я делаю Attached Property членом моей Grid:
<Window>
<Window.Resources>
<data:BindingConverter x:Key="RegisterCommandBindingsConverter" />
</Window.Resources>
<Grid>
<data:AttachedProperties.RegisterCommandBindings>
<MultiBinding Converter="{StaticResource RegisterCommandBindingsConverter}">
<Binding RelativeSource="{RelativeSource Mode=Self}" Path="(data:AttachedProperties.BaseBindings)" />
<Binding ElementName="automobileView" Path="DataContext.CommandBindings" />
</MultiBinding>
</data:AttachedProperties.RegisterCommandBindings>
Однако я хочу, чтобы присоединенное свойство находилось в Window, а не в Grid.Хотя наличие свойства Attached в Grid делает именно то, что мне нужно, меня беспокоит, что я не могу понять, как установить его в Window.
Если я добавлю привязку Attached Property в качестве первого членаWindow, перед Window.Resources я получаю исключение времени выполнения из XAML-файла Window, в котором указано:
'Предоставить значение' System.Windows.StaticResourceExtension ', вызвавшее исключение.'Номер строки '6' и позиция строки '9'.
с внутренним исключением:
Не удается найти ресурс с именем 'RegisterCommandBindingsConverter'.Имена ресурсов чувствительны к регистру.
Если я добавлю привязку Attached Property после Window.Resources, но все еще как прямой член Window и перед Grid, я получу следующую ошибку во время компиляции:
Объект «Окно» уже имеет дочерний элемент и не может добавить «».«Окно» может принять только одного ребенка.Строка 42, Позиция 11.