带有ListBox的WPF数据模板
本文关键字:数据 WPF ListBox 带有 | 更新日期: 2023-09-27 18:00:07
我有一个非常复杂的DataTemplate,它包含三个列表框,它们都有自己的数据模板和分组的样式
我遇到了一个例外:{"找不到名为"ContainerStyle"的资源。资源名称区分大小写。"}
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!--
Merge in the resource dictionary that is shared between the main window and the overview window.
-->
<ResourceDictionary
Source="SharedVisualTemplates.xaml"
/>
</ResourceDictionary.MergedDictionaries>
<DataTemplate x:Key="MessagesDataTemplate"
DataType="ca:Message">
<Grid>
<TextBlock Text="{Binding Path=Name}"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="IncludesDataTemplate"
DataType="ca:Include">
<Grid>
<TextBlock Text="{Binding Path=Name}"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="DefinitionsDataTemplate"
DataType="ca:Definition">
<Grid>
<TextBlock Text="{Binding Path=Name}"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="InterfacesDataTemplate"
DataType="ca:Interface">
<Grid>
<TextBlock Text="{Binding Path=Name}" MouseLeftButtonDown="interface_mouseDown">
<TextBlock.ToolTip>
<ToolTip Focusable="True">
<StackPanel>
<TextBlock FontWeight="Bold" Text="{Binding Path=Name}" FontSize="16" TextWrapping="Wrap" Width="400"/>
<TextBlock Text="{Binding Path=Description}" FontSize="14" TextWrapping="Wrap" Width="400"/>
<TextBlock TextWrapping="Wrap" Width="400">
<Run Text="IsMulticast: " FontSize="14" />
<Run Text="{Binding IsMultiCast}" FontSize="14"/>
</TextBlock>
</StackPanel>
</ToolTip>
</TextBlock.ToolTip>
</TextBlock>
<StackPanel>
<ListBox Grid.ColumnSpan="3" Grid.Row="4"
Name="lbMessages" Background="Transparent" ItemsSource="{Binding MessagesView}" ItemTemplate="{StaticResource MessagesDataTemplate}" BorderBrush="Transparent">
<ListBox.GroupStyle>
<GroupStyle ContainerStyle="{StaticResource ContainerStyle}"/>
</ListBox.GroupStyle>
</ListBox>
<ListBox Grid.ColumnSpan="3" Grid.Row="4"
Name="lbIncludes" Background="Transparent" ItemsSource="{Binding IncludesView}" ItemTemplate="{StaticResource IncludesDataTemplate}" BorderBrush="Transparent">
<ListBox.GroupStyle>
<GroupStyle ContainerStyle="{StaticResource ContainerStyle}"/>
</ListBox.GroupStyle>
</ListBox>
<ListBox Grid.ColumnSpan="3" Grid.Row="4"
Name="lbDefinitions" Background="Transparent" ItemsSource="{Binding DefinitionsView}" ItemTemplate="{StaticResource DefinitionsDataTemplate}" BorderBrush="Transparent">
<ListBox.GroupStyle>
<GroupStyle ContainerStyle="{StaticResource ContainerStyle}"/>
</ListBox.GroupStyle>
</ListBox>
</StackPanel>
</Grid>
</DataTemplate>
<DataTemplate x:Key="EnumsDataTemplate"
DataType="ca:Enum">
<Grid>
<TextBlock Text="{Binding Path=Name}" MouseLeftButtonDown="enum_mouseDown"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="StructsDataTemplate"
DataType="ca:Struct">
<Grid>
<TextBlock Text="{Binding Path=Name}" MouseLeftButtonDown="struct_mouseDown"/>
</Grid>
</DataTemplate>
<!-- UI commands. -->
<RoutedUICommand x:Key="Commands.DeleteSelectedNodes" />
<RoutedUICommand x:Key="Commands.CreateNode" />
<RoutedUICommand x:Key="Commands.DeleteNode" />
<RoutedUICommand x:Key="Commands.DeleteConnection" />
<RoutedUICommand x:Key="Commands.ZoomOut" />
<RoutedUICommand x:Key="Commands.ZoomIn" />
<RoutedUICommand x:Key="Commands.JumpBackToPrevZoom" />
<RoutedUICommand x:Key="Commands.FitContent" />
<RoutedUICommand x:Key="Commands.Fill" />
<RoutedUICommand x:Key="Commands.OneHundredPercent" />
<!--
This converts from a scale value to a percentage value.
It is used to convert the value of 'ContentScale' to the percentage zoom level that is displayed in the UI.
-->
<con:ScaleToPercentConverter
x:Key="scaleToPercentConverter"
/>
<!--
Define the visual style for a 'ConnectorItem'.
-->
<Style
TargetType="{x:Type NetworkUI:ConnectorItem}"
>
<!--
Data-binding for the connector hotspot.
ConnectorItem automatically computes its center points and assings this value
to the 'Hotspot' property. This data-binding then 'pushes' the value into the application
view-model.
-->
<Setter
Property="Hotspot"
Value="{Binding Hotspot, Mode=OneWayToSource}"
/>
<!-- The visual template. -->
<Setter
Property="Template"
>
<Setter.Value>
<ControlTemplate
TargetType="{x:Type NetworkUI:ConnectorItem}"
>
<!-- The visual for the connector. -->
<Ellipse
Stroke="{StaticResource nodeBorderBrush}"
Fill="{StaticResource connectorBackgroundBrush}"
/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!--Style For MainListBox-->
<Style x:Key="ContainerStyle" TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Expander Header="{Binding Name}" IsExpanded="False">
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
StaticResource要求引用的资源名称在加载时的使用之前就在作用域中。无法在此处说明,但如果文件中声明的ContainerStyle晚于模板,则会导致此错误。如果没有,还有很多其他可能的设置方法会导致它还不在范围内,在这种情况下,您可以尝试使用DynamicResource。