通常WPF中通过继承UserControl的来快速创建自定义控件,最近项目上需要设计一个卫星星图显示控件,最终效果如下图所示。完成过程中遇到了自定义集合依赖属性无法触发更新通知的问题,在此记录一下,方便有相同问题的朋友们可以快速解决,也希望有人能发现更好的解决办法。
为了完成目的,我写了下面一个SateChart自定义控件类,
XAML代码如下:
<UserControl x:Class="WpfApplication1.SateChart" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" > <DockPanel Margin="5" LastChildFill="True"> <StackPanel Margin="1" DockPanel.Dock="Top" Orientation="Horizontal" HorizontalAlignment="Center"> <Rectangle Fill="Orange" Width="10" Height="10"/> <CheckBox Name="bdView" Content="BD-2" Margin="5,0,5,0" IsChecked="True" Click="bdView_Click"/> <Rectangle Fill="Red" Width="10" Height="10"/> <CheckBox Name="gpsView" Content="GPS" Margin="5,0,5,0" IsChecked="True" Click="gpsView_Click"/> <Rectangle Fill="Blue" Width="10" Height="10"/> <CheckBox Name="glnssView" Content="GLNS" Margin="5,0,5,0" IsChecked="True" Click="glnssView_Click"/> </StackPanel> <Viewbox DockPanel.Dock="Bottom" MaxHeight="300" MaxWidth="300"> <Canvas Name="myCanvas" Width="90" Height="90" > <Ellipse Name="e1" Width="90" Height="90" Fill="Black" Stroke="Black" HorizontalAlignment="Center"/> <Ellipse Name="e2" Width="90" Height="90" Fill="Black" Stroke="White" HorizontalAlignment="Center"> <Ellipse.RenderTransform> <ScaleTransform ScaleX="0.8333" ScaleY="0.8333" CenterX="45" CenterY="45"/> </Ellipse.RenderTransform> </Ellipse> <Ellipse Name="e3" Width="90" Height="90" Fill="Black" Stroke="White" HorizontalAlignment="Center"> <Ellipse.RenderTransform> <ScaleTransform ScaleX="0.6666" ScaleY="0.6666" CenterX="45" CenterY="45"/> </Ellipse.RenderTransform> </Ellipse> <Ellipse Name="e4" Width="90" Height="90" Fill="Black" Stroke="White" HorizontalAlignment="Center"> <Ellipse.RenderTransform> <ScaleTransform ScaleX="0.5" ScaleY="0.5" CenterX="45" CenterY="45"/> </Ellipse.RenderTransform> </Ellipse> <Ellipse Name="e5" Width="90" Height="90" Fill="Black" Stroke="White" HorizontalAlignment="Center"> <Ellipse.RenderTransform> <ScaleTransform ScaleX="0.333" ScaleY="0.333" CenterX="45" CenterY="