mirror of
https://github.com/fadden/6502bench.git
synced 2024-08-19 20:29:36 +00:00
Thumbnails are now visible in the main list and in the visualization set editor. They're generated on first need, and regenerated when the set of plugins changes. Added a checkerboard background for the visualization editor bitmap preview. (It looks all official now.)
403 lines
23 KiB
XML
403 lines
23 KiB
XML
<!--
|
|
Copyright 2019 faddenSoft
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
|
|
<!--
|
|
ListView/ListViewItem control template and style. This is used for the main code ListView.
|
|
The most significant consideration is getting long comments and notes into the 5th column and
|
|
having them span multiple columns. Most of this came from the default style (WPF 4.5 on
|
|
Win10, default theme).
|
|
|
|
This interacts with DisplayList.FormattedParts.
|
|
|
|
See also https://github.com/fadden/DisasmUiTest
|
|
-->
|
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
|
|
|
<!-- some brushes, extracted from the default style -->
|
|
<LinearGradientBrush x:Key="ListItemHoverFill" EndPoint="0,1" StartPoint="0,0">
|
|
<GradientStop Color="{DynamicResource Color_HoverFill0}" Offset="0"/>
|
|
<GradientStop Color="{DynamicResource Color_HoverFill1}" Offset="1"/>
|
|
</LinearGradientBrush>
|
|
|
|
<LinearGradientBrush x:Key="ListItemSelectedFill" EndPoint="0,1" StartPoint="0,0">
|
|
<GradientStop Color="{DynamicResource Color_SelectedFill0}" Offset="0"/>
|
|
<GradientStop Color="{DynamicResource Color_SelectedFill1}" Offset="1"/>
|
|
</LinearGradientBrush>
|
|
|
|
<LinearGradientBrush x:Key="ListItemSelectedInactiveFill" EndPoint="0,1" StartPoint="0,0">
|
|
<GradientStop Color="{DynamicResource Color_SelectedInactiveFill0}" Offset="0"/>
|
|
<GradientStop Color="{DynamicResource Color_SelectedInactiveFill1}" Offset="1"/>
|
|
</LinearGradientBrush>
|
|
|
|
<LinearGradientBrush x:Key="ListItemSelectedHoverFill" EndPoint="0,1" StartPoint="0,0">
|
|
<GradientStop Color="{DynamicResource Color_SelectedHoverFill0}" Offset="0"/>
|
|
<GradientStop Color="{DynamicResource Color_SelectedHoverFill1}" Offset="1"/>
|
|
</LinearGradientBrush>
|
|
|
|
<!-- Column set for the long-comment lines. The first five columns will be empty, but
|
|
have their widths set to match those in the containing ListView.
|
|
If you don't set DisplayMemberBinding, it will try to ToString() the entire object.
|
|
-->
|
|
<GridViewColumnCollection x:Key="gvcc">
|
|
<GridViewColumn DisplayMemberBinding="{Binding Offset}" Width="{Binding
|
|
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}
|
|
}, Path=View.Columns[0].ActualWidth}"/>
|
|
<GridViewColumn DisplayMemberBinding="{Binding Addr}" Width="{Binding
|
|
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}
|
|
}, Path=View.Columns[1].ActualWidth}"/>
|
|
<GridViewColumn DisplayMemberBinding="{Binding Bytes}" Width="{Binding
|
|
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}
|
|
}, Path=View.Columns[2].ActualWidth}"/>
|
|
<GridViewColumn DisplayMemberBinding="{Binding Flags}" Width="{Binding
|
|
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}
|
|
}, Path=View.Columns[3].ActualWidth}"/>
|
|
<GridViewColumn DisplayMemberBinding="{Binding Attr}" Width="{Binding
|
|
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}
|
|
}, Path=View.Columns[4].ActualWidth}"/>
|
|
<!-- This column holds the long comment. There's no easy way to set its width, so we
|
|
have to let the main window take care of that. (It's tempting to just make its width
|
|
very large, but that causes the GridView contents to horizontally scroll independently
|
|
of the GridView header when you reach the edge of the "normal" column set.) -->
|
|
<GridViewColumn Header="(long comment)" DisplayMemberBinding="{Binding Path=Comment}"
|
|
Width="{Binding LongCommentWidth}"/>
|
|
</GridViewColumnCollection>
|
|
|
|
<GridViewColumnCollection x:Key="gvcc_vs">
|
|
<GridViewColumn DisplayMemberBinding="{Binding Offset}" Width="{Binding
|
|
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}
|
|
}, Path=View.Columns[0].ActualWidth}"/>
|
|
<GridViewColumn DisplayMemberBinding="{Binding Addr}" Width="{Binding
|
|
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}
|
|
}, Path=View.Columns[1].ActualWidth}"/>
|
|
<GridViewColumn DisplayMemberBinding="{Binding Bytes}" Width="{Binding
|
|
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}
|
|
}, Path=View.Columns[2].ActualWidth}"/>
|
|
<GridViewColumn DisplayMemberBinding="{Binding Flags}" Width="{Binding
|
|
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}
|
|
}, Path=View.Columns[3].ActualWidth}"/>
|
|
<GridViewColumn DisplayMemberBinding="{Binding Attr}" Width="{Binding
|
|
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}
|
|
}, Path=View.Columns[4].ActualWidth}"/>
|
|
<!-- This column holds the visualization set. -->
|
|
<GridViewColumn Header="(visualization set)" Width="{Binding LongCommentWidth}">
|
|
<GridViewColumn.CellTemplate>
|
|
<DataTemplate>
|
|
<StackPanel Orientation="Horizontal">
|
|
<TextBlock Text="{Binding Path=Comment}" VerticalAlignment="Center"/>
|
|
<ItemsControl ItemsSource="{Binding VisualizationSet}">
|
|
<ItemsControl.ItemsPanel>
|
|
<ItemsPanelTemplate>
|
|
<StackPanel Orientation="Horizontal"/>
|
|
</ItemsPanelTemplate>
|
|
</ItemsControl.ItemsPanel>
|
|
<ItemsControl.ItemTemplate>
|
|
<DataTemplate>
|
|
<Border BorderThickness="1" Margin="8,0,0,0"
|
|
Background="{StaticResource BitmapBackground}">
|
|
<Image Width="64" Height="64" Source="{Binding CachedImage}"
|
|
RenderOptions.BitmapScalingMode="NearestNeighbor"/>
|
|
</Border>
|
|
</DataTemplate>
|
|
</ItemsControl.ItemTemplate>
|
|
</ItemsControl>
|
|
</StackPanel>
|
|
</DataTemplate>
|
|
</GridViewColumn.CellTemplate>
|
|
</GridViewColumn>
|
|
</GridViewColumnCollection>
|
|
|
|
<!-- Base template for ListView items, derived from the system default. We have to define
|
|
this fully so things don't turn into a big mess on long-comment lines. -->
|
|
<ControlTemplate x:Key="baseListItemTemplate" TargetType="{x:Type ListViewItem}">
|
|
<StackPanel>
|
|
<Border BorderBrush="{TemplateBinding BorderBrush}"
|
|
BorderThickness="{TemplateBinding BorderThickness}"
|
|
Background="{TemplateBinding Background}"
|
|
CornerRadius="2"
|
|
SnapsToDevicePixels="true">
|
|
<Border x:Name="InnerBorder" BorderThickness="1" CornerRadius="1">
|
|
<Grid>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition MaxHeight="11"/>
|
|
<RowDefinition/>
|
|
</Grid.RowDefinitions>
|
|
<Rectangle x:Name="UpperHighlight" Fill="{DynamicResource Brush_SelectedUpperHighlight}" Visibility="Collapsed"/>
|
|
<GridViewRowPresenter Grid.RowSpan="2"
|
|
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
|
|
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
|
|
</Grid>
|
|
</Border>
|
|
</Border>
|
|
</StackPanel>
|
|
|
|
<!-- triggers for hover, selection, and activation effects -->
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="true">
|
|
<Setter Property="Background" Value="{StaticResource ListItemHoverFill}"/>
|
|
<Setter Property="BorderBrush" Value="{DynamicResource Brush_MouseOverBorder}"/>
|
|
<Setter Property="Visibility" TargetName="UpperHighlight" Value="Visible"/>
|
|
</Trigger>
|
|
<Trigger Property="IsSelected" Value="true">
|
|
<Setter Property="Background" Value="{StaticResource ListItemSelectedFill}"/>
|
|
<Setter Property="BorderBrush" Value="{DynamicResource Brush_SelectedBorder}"/>
|
|
<Setter Property="BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF"/>
|
|
<Setter Property="Visibility" TargetName="UpperHighlight" Value="Visible"/>
|
|
<Setter Property="Fill" TargetName="UpperHighlight" Value="{DynamicResource Brush_SelectedUpperHighlight}"/>
|
|
</Trigger>
|
|
<MultiTrigger>
|
|
<MultiTrigger.Conditions>
|
|
<Condition Property="IsSelected" Value="true"/>
|
|
<Condition Property="Selector.IsSelectionActive" Value="false"/>
|
|
</MultiTrigger.Conditions>
|
|
<Setter Property="Background" Value="{StaticResource ListItemSelectedInactiveFill}"/>
|
|
<Setter Property="BorderBrush" Value="{DynamicResource Brush_SelectedActiveBorder}"/>
|
|
</MultiTrigger>
|
|
<MultiTrigger>
|
|
<MultiTrigger.Conditions>
|
|
<Condition Property="IsSelected" Value="true"/>
|
|
<Condition Property="IsMouseOver" Value="true"/>
|
|
</MultiTrigger.Conditions>
|
|
<Setter Property="Background" Value="{StaticResource ListItemSelectedHoverFill}"/>
|
|
<Setter Property="BorderBrush" Value="{DynamicResource Brush_SelectedMouseOverBorder}"/>
|
|
</MultiTrigger>
|
|
<Trigger Property="IsEnabled" Value="false">
|
|
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
|
|
<!-- Template for long lines. This is a modification of the default style, with
|
|
Content and Columns attributes defined in the GridViewRowPresenter. It appears we
|
|
inherit the FocusVisualStyle from the default. -->
|
|
<ControlTemplate x:Key="longCommentTemplate" TargetType="{x:Type ListViewItem}">
|
|
<StackPanel>
|
|
<Border BorderBrush="{TemplateBinding BorderBrush}"
|
|
BorderThickness="{TemplateBinding BorderThickness}"
|
|
Background="{TemplateBinding Background}"
|
|
CornerRadius="2"
|
|
SnapsToDevicePixels="true">
|
|
<Border x:Name="InnerBorder" BorderThickness="1" CornerRadius="1">
|
|
<Grid>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition MaxHeight="11"/>
|
|
<RowDefinition/>
|
|
</Grid.RowDefinitions>
|
|
<Rectangle x:Name="UpperHighlight" Fill="#75FFFFFF" Visibility="Collapsed"/>
|
|
<GridViewRowPresenter Content="{TemplateBinding Content}"
|
|
Columns="{StaticResource gvcc}"
|
|
Grid.RowSpan="2"
|
|
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
|
|
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
|
|
</Grid>
|
|
</Border>
|
|
</Border>
|
|
</StackPanel>
|
|
|
|
<!-- triggers for hover, selection, and activation effects -->
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="true">
|
|
<Setter Property="Background" Value="{StaticResource ListItemHoverFill}"/>
|
|
<Setter Property="BorderBrush" Value="{DynamicResource Brush_MouseOverBorder}"/>
|
|
<Setter Property="Visibility" TargetName="UpperHighlight" Value="Visible"/>
|
|
</Trigger>
|
|
<Trigger Property="IsSelected" Value="true">
|
|
<Setter Property="Background" Value="{StaticResource ListItemSelectedFill}"/>
|
|
<Setter Property="BorderBrush" Value="{DynamicResource Brush_SelectedBorder}"/>
|
|
<Setter Property="BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF"/>
|
|
<Setter Property="Visibility" TargetName="UpperHighlight" Value="Visible"/>
|
|
<Setter Property="Fill" TargetName="UpperHighlight" Value="#40FFFFFF"/>
|
|
</Trigger>
|
|
<MultiTrigger>
|
|
<MultiTrigger.Conditions>
|
|
<Condition Property="IsSelected" Value="true"/>
|
|
<Condition Property="Selector.IsSelectionActive" Value="false"/>
|
|
</MultiTrigger.Conditions>
|
|
<Setter Property="Background" Value="{StaticResource ListItemSelectedInactiveFill}"/>
|
|
<Setter Property="BorderBrush" Value="{DynamicResource Brush_SelectedActiveBorder}"/>
|
|
</MultiTrigger>
|
|
<MultiTrigger>
|
|
<MultiTrigger.Conditions>
|
|
<Condition Property="IsSelected" Value="true"/>
|
|
<Condition Property="IsMouseOver" Value="true"/>
|
|
</MultiTrigger.Conditions>
|
|
<Setter Property="Background" Value="{StaticResource ListItemSelectedHoverFill}"/>
|
|
<Setter Property="BorderBrush" Value="{DynamicResource Brush_SelectedMouseOverBorder}"/>
|
|
</MultiTrigger>
|
|
<Trigger Property="IsEnabled" Value="false">
|
|
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
|
|
<!-- yet another copy of the template, this one for VisualizationSet lines -->
|
|
<ControlTemplate x:Key="visualizationSetTemplate" TargetType="{x:Type ListViewItem}">
|
|
<StackPanel>
|
|
<Border BorderBrush="{TemplateBinding BorderBrush}"
|
|
BorderThickness="{TemplateBinding BorderThickness}"
|
|
Background="{TemplateBinding Background}"
|
|
CornerRadius="2"
|
|
SnapsToDevicePixels="true">
|
|
<Border x:Name="InnerBorder" BorderThickness="1" CornerRadius="1">
|
|
<Grid>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition MaxHeight="11"/>
|
|
<RowDefinition/>
|
|
</Grid.RowDefinitions>
|
|
<Rectangle x:Name="UpperHighlight" Fill="#75ffffff" Visibility="Collapsed"/>
|
|
<GridViewRowPresenter Content="{TemplateBinding Content}"
|
|
Columns="{StaticResource gvcc_vs}"
|
|
Grid.RowSpan="2"
|
|
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
|
|
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
|
|
</Grid>
|
|
</Border>
|
|
</Border>
|
|
</StackPanel>
|
|
|
|
<!-- triggers for hover, selection, and activation effects -->
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="true">
|
|
<Setter Property="Background" Value="{StaticResource ListItemHoverFill}"/>
|
|
<Setter Property="BorderBrush" Value="{DynamicResource Brush_MouseOverBorder}"/>
|
|
<Setter Property="Visibility" TargetName="UpperHighlight" Value="Visible"/>
|
|
</Trigger>
|
|
<Trigger Property="IsSelected" Value="true">
|
|
<Setter Property="Background" Value="{StaticResource ListItemSelectedFill}"/>
|
|
<Setter Property="BorderBrush" Value="{DynamicResource Brush_SelectedBorder}"/>
|
|
<Setter Property="BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF"/>
|
|
<Setter Property="Visibility" TargetName="UpperHighlight" Value="Visible"/>
|
|
<Setter Property="Fill" TargetName="UpperHighlight" Value="#40FFFFFF"/>
|
|
</Trigger>
|
|
<MultiTrigger>
|
|
<MultiTrigger.Conditions>
|
|
<Condition Property="IsSelected" Value="true"/>
|
|
<Condition Property="Selector.IsSelectionActive" Value="false"/>
|
|
</MultiTrigger.Conditions>
|
|
<Setter Property="Background" Value="{StaticResource ListItemSelectedInactiveFill}"/>
|
|
<Setter Property="BorderBrush" Value="{DynamicResource Brush_SelectedActiveBorder}"/>
|
|
</MultiTrigger>
|
|
<MultiTrigger>
|
|
<MultiTrigger.Conditions>
|
|
<Condition Property="IsSelected" Value="true"/>
|
|
<Condition Property="IsMouseOver" Value="true"/>
|
|
</MultiTrigger.Conditions>
|
|
<Setter Property="Background" Value="{StaticResource ListItemSelectedHoverFill}"/>
|
|
<Setter Property="BorderBrush" Value="{DynamicResource Brush_SelectedMouseOverBorder}"/>
|
|
</MultiTrigger>
|
|
<Trigger Property="IsEnabled" Value="false">
|
|
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
|
|
|
|
<!-- ListView style. We have to override the general foreground/background colors to
|
|
avoid making the whole thing look freakish. -->
|
|
<Style x:Key="codeListStyle" TargetType="{x:Type ListView}">
|
|
<Setter Property="Foreground" Value="{DynamicResource Brush_ListViewForeground}"/>
|
|
<Setter Property="Background" Value="{DynamicResource Brush_ListViewBackground}"/>
|
|
</Style>
|
|
|
|
<Style x:Key="codeListItemStyle" TargetType="{x:Type ListViewItem}">
|
|
<!-- Base template. -->
|
|
<Setter Property="Template" Value="{StaticResource baseListItemTemplate}"/>
|
|
|
|
<!-- There's a one-pixel gap between items, possibly space for grid lines, that
|
|
can't seem to be eliminated. Declaring a negative margin removes it. This is
|
|
necessary because the gap isn't a mouse target, so if your mouse is in just the
|
|
wrong place you'll feel like you clicked and nothing happened. -->
|
|
<Setter Property="Margin" Value="0,-1,0,0"/>
|
|
|
|
<!-- This causes individual TextBoxes to stretch to fill the column. This is nice
|
|
because the cell-highlight stuff will set the background on the full cell rather than
|
|
just the bit with the text. -->
|
|
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
|
|
|
|
<Style.Triggers>
|
|
<DataTrigger Binding="{Binding Path=IsLongComment}" Value="True">
|
|
<Setter Property="Template" Value="{StaticResource longCommentTemplate}"/>
|
|
</DataTrigger>
|
|
<DataTrigger Binding="{Binding Path=IsVisualizationSet}" Value="True">
|
|
<Setter Property="Template" Value="{StaticResource visualizationSetTemplate}"/>
|
|
</DataTrigger>
|
|
<DataTrigger Binding="{Binding Path=HasBackgroundColor}" Value="True">
|
|
<Setter Property="Background" Value="{Binding Path=BackgroundBrush}"/>
|
|
</DataTrigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
|
|
<!-- Highlighting for individual cells. -->
|
|
<LinearGradientBrush x:Key="HighlightedCellFill" EndPoint="0,1" StartPoint="0,0">
|
|
<GradientStop Color="{DynamicResource Color_HighlightedCellFill0}" Offset="0"/>
|
|
<GradientStop Color="{DynamicResource Color_HighlightedCellFill1}" Offset="1"/>
|
|
</LinearGradientBrush>
|
|
|
|
<DataTemplate x:Key="addrHighlightTemplate">
|
|
<TextBlock>
|
|
<TextBlock.Style>
|
|
<Style TargetType="TextBlock">
|
|
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
|
|
<Style.Triggers>
|
|
<DataTrigger Binding="{Binding Path=HasAddrLabelHighlight}" Value="True">
|
|
<Setter Property="TextBlock.Background" Value="{StaticResource HighlightedCellFill}"/>
|
|
<Setter Property="TextBlock.Foreground" Value="{DynamicResource Brush_ListViewForeground}"/>
|
|
</DataTrigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
</TextBlock.Style>
|
|
<TextBlock.Text>
|
|
<Binding Path="Addr"/>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
</DataTemplate>
|
|
<DataTemplate x:Key="labelHighlightTemplate">
|
|
<TextBlock>
|
|
<TextBlock.Style>
|
|
<Style TargetType="TextBlock">
|
|
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
|
|
<Style.Triggers>
|
|
<DataTrigger Binding="{Binding Path=HasAddrLabelHighlight}" Value="True">
|
|
<Setter Property="TextBlock.Background" Value="{StaticResource HighlightedCellFill}"/>
|
|
<Setter Property="TextBlock.Foreground" Value="{DynamicResource Brush_ListViewForeground}"/>
|
|
</DataTrigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
</TextBlock.Style>
|
|
<TextBlock.Text>
|
|
<Binding Path="Label"/>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
</DataTemplate>
|
|
<DataTemplate x:Key="flagsHighlightTemplate">
|
|
<TextBlock>
|
|
<TextBlock.Style>
|
|
<Style TargetType="TextBlock">
|
|
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
|
|
<Style.Triggers>
|
|
<DataTrigger Binding="{Binding Path=HasModifiedFlags}" Value="True">
|
|
<Setter Property="TextBlock.Foreground" Value="DeepSkyBlue"/>
|
|
<Setter Property="TextBlock.FontWeight" Value="Bold"/>
|
|
</DataTrigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
</TextBlock.Style>
|
|
<TextBlock.Text>
|
|
<Binding Path="Flags"/>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
</DataTemplate>
|
|
</ResourceDictionary> |