用于MouseOver的DataTemplate ListBoxItem

时间:2017-02-27 07:37:58

标签: c# wpf xaml

我试图通过WPF更好地理解模板系统。我的设计目标是,我正在尝试重新设计我使用的软件包的组件,以使用WPF而不是2D Graphics Librarys。现在的问题是屏幕上有2000个实体,在强大的i7工作站上平移和缩放是非常滞后的。我希望在WPF中重新开发它以提高性能。

正如测试一样,我创建了一个新项目并使用Canvas创建了一个基本的XAML / WPF视图。此画布显示省略号(基本上我正在构建用于规划目的的2D地图,其中包含不同颜色的圆圈以显示不同的内容)。

现在,根据圆圈的模型(圆圈A或圆圈B),我可以使用DataTemplate显示我的圆圈。当我将鼠标放在圆圈上时,我的窗口后面有默认的“蓝框”区域,我希望将其移除。到目前为止,我已经设法使用触发器来改变鼠标上的圆形颜色,但我仍然有悬停区域。

enter image description here

get

我创建了自己的ListBox控件,它将ListBoxItems定位在画布内的X,Y位置。

<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>

TLDR:如何摆脱鼠标悬停在圆圈后面的蓝色高光区?

1 个答案:

答案 0 :(得分:0)

来自Wayne Lo的链接主题的回答。

<Style TargetType="ListBoxItem">
    <Setter Property="IsSelected" Value="{Binding Content.IsSelected, Mode=TwoWay, RelativeSource={RelativeSource Self}}"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBoxItem">
                <ContentPresenter/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>