【发布时间】:2017-07-17 17:39:38
【问题描述】:
我正在尝试更好地了解使用 WPF 的模板系统。我的设计目标是尝试重新设计我正在使用的软件包的一个组件,以使用 WPF 而不是 2D 图形库。现在的问题是屏幕上有 2000 个实体,平移和缩放在功能强大的 i7 工作站上非常滞后。我希望在 WPF 中重新开发它以提高性能。
作为一个测试,我创建了一个新项目并创建了一个带有 Canvas 的基本 XAML/WPF 视图。此画布显示椭圆(本质上,我正在构建一个用于规划目的的 2D 地图,其中有不同颜色的圆圈来显示不同的事物)。
现在,我使用 DataTemplate 可以很好地显示我的圆圈,具体取决于圆圈的类型(圆圈 A 或圆圈 B)。当我将鼠标悬停在圆圈上时,它后面有 Windows 默认的“蓝色框”区域,我希望将其删除。到目前为止,我已经设法使用触发器来更改鼠标悬停时的圆圈颜色,但我仍然有悬停区域。
<DataTemplate x:Key="HoleBTemplate">
<Grid Width="40" Height="40">
<Ellipse>
<Ellipse.Style>
<Style TargetType="Ellipse">
<Setter Property="Fill" Value="DeepSkyBlue"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Fill" Value="Yellow" />
</Trigger>
</Style.Triggers>
</Style>
</Ellipse.Style>
</Ellipse>
<Ellipse Fill="White" Margin="1" IsHitTestVisible="False" />
<TextBlock
VerticalAlignment="Center"
TextAlignment="Center"
HorizontalAlignment="Center"
Text="{Binding Name}"
IsHitTestVisible="False">
</TextBlock>
<Grid.RenderTransform>
<TranslateTransform X="-20" Y="-20" />
</Grid.RenderTransform>
</Grid>
</DataTemplate>
我创建了自己的 ListBox 控件,它将 ListBoxItems 放置在画布内的 X、Y 位置。
<controls:ListBoxMap ItemsSource="{Binding Holes}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas></Canvas>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplateSelector>
<controls:PlanTemplateSelector
HoleATemplate="{StaticResource HoleATemplate}"
HoleBTemplate="{StaticResource HoleBTemplate}"/>
</ItemsControl.ItemTemplateSelector>
</controls:ListBoxMap>
TLDR:如何消除鼠标悬停在圆圈后面的蓝色高亮区域?
【问题讨论】:
-
现在将阅读以上内容并在重复时应用