【问题标题】:DataTemplate ListBoxItem for MouseOver鼠标悬停的 DataTemplate ListBoxItem
【发布时间】: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:如何消除鼠标悬停在圆圈后面的蓝色高亮区域?

【问题讨论】:

标签: c# wpf xaml


【解决方案1】:

来自上面链接线程的答案,作者 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>

【讨论】:

    猜你喜欢
    • 2016-12-30
    • 1970-01-01
    • 2011-08-04
    • 2018-09-03
    • 1970-01-01
    • 2015-04-22
    • 2011-05-26
    • 2017-10-14
    • 1970-01-01
    相关资源
    最近更新 更多