我的资源字典,其中包含一个数据模板,希望用于与其关联的每个VM。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewModel="clr-namespace:IntSimulator.ViewModels.EquipmentVMs"
xmlns:converters="clr-namespace:IntSimulator.Converters"
xmlns:local="clr-namespace:IntSimulator.ResourceDictionary">
<converters:ScaleXCoordConverter x:Key="ScaleXCoordConverter"></converters:ScaleXCoordConverter>
<converters:ScaleYCoordConverter x:Key="ScaleYCoordConverter"></converters:ScaleYCoordConverter>
<DataTemplate x:Key="KeyMcKeyface" DataType="{x:Type viewModel:CircuitTrackViewModel}">
<ItemsControl ItemsSource="{Binding LineCoords}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<!--When we click on the line, it will increase Z-index and change colour, to bring occupied track forward and highlight -->
<Line
X1="{Binding X1, Converter={StaticResource ScaleXCoordConverter}}" Y1="{Binding Y1, Converter={StaticResource ScaleYCoordConverter}}"
X2="{Binding X2, Converter={StaticResource ScaleXCoordConverter}}" Y2="{Binding Y2, Converter={StaticResource ScaleYCoordConverter}}"
Stroke="{Binding DataContext.Colour.Colour, RelativeSource={RelativeSource AncestorType=ContentPresenter, AncestorLevel=2}}"
StrokeThickness="1" StrokeEndLineCap="{Binding EndLineCap}" StrokeStartLineCap="{Binding StartLineCap}">
<Line.InputBindings>
<MouseBinding Gesture="LeftClick" Command="{Binding DataContext.OccupyTrackCommand, RelativeSource={RelativeSource AncestorType=ContentPresenter, AncestorLevel=2}}" CommandParameter="True"/>
</Line.InputBindings>
<Line.RenderTransform>
<TranslateTransform X="{Binding DataContext.DisplayViewModel.MainOffsetX, RelativeSource={RelativeSource AncestorType=Window, AncestorLevel=1}}"
Y="{Binding DataContext.DisplayViewModel.MainOffsetY, RelativeSource={RelativeSource AncestorType=Window, AncestorLevel=1}}"/>
</Line.RenderTransform>
</Line>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
我已经添加
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary x:Key="CircuitTracksResourceDictionary" Source="ResourceDictionary/CircuitTracksResourceDictionary.xaml"/>
</ResourceDictionary>
到我的App.xaml。现在,我希望在我的主要xaml页中使用此资源字典,但是不确定如何执行此操作。
我曾经使用用户控件来执行此操作,如下所示:
//OLD CODE
<DataTemplate DataType="{x:Type viewModel:CircuitTrackViewModel}">
<userControlLines:CircuitTrackUserControl DataContext="{Binding}"></userControlLines:CircuitTrackUserControl>
</DataTemplate>
但是,这导致了性能问题。理想情况下,我只想像这样将数据模板放在我的主要xaml页面中,但要使用我的资源字典作为静态资源。先感谢您。
x:Key
从中删除DataTemplate
使其隐式:
<DataTemplate DataType="{x:Type viewModel:CircuitTrackViewModel}">
然后,您只需要将合并ResourceDictionary
到您的应用程序中,App.xaml
即可将其应用于CircuitTrackViewModel
整个应用程序中的所有对象:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="..." />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句