我正在尝试应用DataTrigger
来更改DataTemplate
的{{1}}并收到错误:
ListBox
我的主"Error 1 Cannot find the Trigger target 'IssueListBox'. (The target must appear before any Setters, Triggers, or Conditions that use it.)"
中有一个ListBox
(在Window
以及其他控件中):
DockPanel
我在App.xaml中有一对<ListBox x:Name="IssueListBox"
ItemsSource="{Binding}"
ItemTemplate="{StaticResource ShowIssueSimple}"
IsSynchronizedWithCurrentItem="True"
HorizontalContentAlignment="Stretch"
BorderThickness="3" DockPanel.Dock="Top"
VerticalContentAlignment="Stretch" Margin="2"/>
,在第二个模板的底部有一个DataTemplate
:
DataTrigger
如何让 <DataTemplate x:Key="ShowIssueDetail">
<Border CornerRadius="4, 8, 4, 8" Margin="2" MinWidth="400" BorderThickness="3"
BorderBrush="{Binding Path=IssUrgency, Converter={StaticResource IntToRYGBBoarderBrushConverter}}">
<StackPanel Orientation="Horizontal">
<StackPanel Margin="10">
<TextBlock Text="{Binding IssSubject}" FontWeight="Bold" FontSize="14"/>
<StackPanel Width="Auto" Orientation="Horizontal">
<TextBlock Text="Due: " FontWeight="Bold"/>
<TextBlock Text="{Binding IssDueDate}" FontStyle="Italic" HorizontalAlignment="Left"/>
</StackPanel>
<StackPanel Width="Auto" Orientation="Horizontal">
<TextBlock Text="Category: " FontWeight="Bold"/>
<TextBlock Text="{Binding IssCategory}"/>
</StackPanel>
</StackPanel>
</StackPanel>
</Border>
</DataTemplate>
<DataTemplate x:Key="ShowIssueSimple">
<Border CornerRadius="6"
Margin="2,1,2,1"
MinWidth="400"
BorderThickness="2"
SnapsToDevicePixels="True"
BorderBrush="{Binding Path=IssUrgency, Converter={StaticResource IntToRYGBBoarderBrushConverter}}">
<StackPanel Margin="5">
<TextBlock Text="{Binding IssSubject}" FontWeight="Bold" FontSize="14"/>
</StackPanel>
</Border>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Source={StaticResource sbvm}, Path=ShowDetailListItems}" Value="True">
<Setter TargetName="IssueListBox" Property="ItemTemplate" Value="{StaticResource ShowIssueDetail}"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
工作?谷歌先生让我失望了,很多像这样的例子比比皆是,但他们不是基于另一种控制。
答案 0 :(得分:3)
您的数据模板是app.xaml中定义的StaticResource,您正在尝试将元素名称绑定到不存在于同一范围内的元素IssueListBox。即便如此,你要做的就是这个。 Listbox有一个数据模板DT,在DT中你试图回到List框并将其DataTemplate设置为另一个(不是DT)。
为什么不组合模板,将细节的可见性设置为折叠,并根据您的属性触发可见性。然后你根本不需要引用列表框,模板保持不变,只是在你想要查看细节时在内部进行更改。