如何在基于CheckBox的WPF中更改ListBox DataTemplate

时间:2010-01-13 03:11:50

标签: wpf xaml listbox datatemplate datatrigger

我正在尝试应用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> 工作?谷歌先生让我失望了,很多像这样的例子比比皆是,但他们不是基于另一种控制。

1 个答案:

答案 0 :(得分:3)

您的数据模板是app.xaml中定义的StaticResource,您正在尝试将元素名称绑定到不存在于同一范围内的元素IssueListBox。即便如此,你要做的就是这个。 Listbox有一个数据模板DT,在DT中你试图回到List框并将其DataTemplate设置为另一个(不是DT)。

为什么不组合模板,将细节的可见性设置为折叠,并根据您的属性触发可见性。然后你根本不需要引用列表框,模板保持不变,只是在你想要查看细节时在内部进行更改。