Не удается найти цель триггера ... цель должна появиться раньше - PullRequest
1 голос
/ 16 мая 2011

Я получаю это предупреждение:

Не удалось найти цель триггера 'ErrandPropertiesGroupBox'. (Цель должна появляться перед любыми сеттерами, триггерами или условиями, которые ее используют.)

Вот XAML:

<UserControl.Resources>
    <ResourceDictionary>
        <ObjectDataProvider x:Key="ErrandData" />

        <DataTemplate x:Key="GroupTemplate">
            <GroupBox>
                <GroupBox.Header>
                    <WrapPanel>
                        <Label Content="Group #" />
                        <Label Content="{Binding Path=df_groupOrder}" />
                    </WrapPanel>
                </GroupBox.Header>
                <ListBox ItemsSource="{Binding Path=df_errands}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Label Name="label1" Content="{Binding Path=TypeName}" />
                            <DataTemplate.Triggers>
                                <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}" Value="True">
                                    <Setter TargetName="ErrandPropertiesGroupBox" Property="Background" Value="HotPink" />
                                </DataTrigger>
                            </DataTemplate.Triggers>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </GroupBox>
        </DataTemplate>

    </ResourceDictionary>
</UserControl.Resources>

<WrapPanel Name="rootWrapPanel">
    <ItemsControl ItemsSource="{Binding Source={StaticResource ErrandData}, Path=df_sequentialErrandGroup}" ItemTemplate="{StaticResource GroupTemplate}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
    <GroupBox Name="ErrandPropertiesGroupBox" Header="Errand Properties" />
</WrapPanel>

Как я могу это исправить? (В Google есть похожие посты, но я не могу собрать правильное решение из них.)

Ответы [ 2 ]

2 голосов
/ 16 мая 2011

Сеттер внутри DataTemplate может ссылаться только на другие элементы управления внутри DataTemplate (это его NameScope).Итак, насколько мне известно, вы не можете сделать это так, как пытаетесь это сделать.

Я пытался выяснить, как это может работать для вас,но я смущен вашим кодом.Похоже, вы пытаетесь установить фон GroupBox, который находится за пределами ItemsControl, всякий раз, когда выбирается какой-либо элемент внутри ListBox (который сам внутри StackPanel)?

Это, кажется, не имеет большого смысла для меня.Можете ли вы уточнить, чего вы пытаетесь достичь?

Редактировать:

Исходя из вашего комментария ниже, я думаю, что я бы хотел использовать ViewModelдля этого.Свяжите Visibility из GroupBox с вашим ViewModel и затем обновите это свойство в вашем ViewModel при изменении выбора.Тогда, если вы хотите сделать другие вещи видимыми или невидимыми на основе того же самого, вам просто нужно привязать это свойство, а не связываться с Triggers и Setters.

0 голосов
/ 16 мая 2011

От нашего друга документация :

Вы можете установить это свойство для имени любого элемента в области, в которой применяется коллекция сеттеров (коллекция, частью которой является этот сеттер). Обычно это именованный элемент в шаблоне, который содержит этот установщик.

Ваша цель находится вне области видимости, вы не должны изменять внешние объекты из какого-либо DataTemplate.

...