Flyout上的VisualStateManager不突出显示整个区域

我有一个VisualStateManager,当指针在项目上时控制背景颜色。 问题是,它不会突出显示整个区域,只是文本和图标周围的一小部分。 这是我的代码:

未完全突出显示

                                 

编辑:

谢谢大家的答案。 我会尽可能地研究这些解决方案; 我最终做了一些不同的事情 – 使区域变大,这样你就可以通过添加填充来看到亮点。 这不是我想要的,这就是为什么我会研究这些。

它不会突出显示整个区域,因为您在MenuFlyoutItem中使用了Visual State,而突出显示区域是MenuFlyoutItem的区域。

您可以在Visual Studio的Live Visual Tree中看到这一点。 要清楚地看到这一点,我们可以在Simulator中运行应用程序,并在Live Visual Tree中选中“在正在运行的应用程序中显示布局装饰” 。 然后你会看到MenuFlyoutItem的大小。

在此处输入图像描述

在Live Visual Tree中选择MenuFlyoutItem时,其区域将为蓝色。 在我的图片中不清楚,你可以自己尝试一下。

因此,为了突出整个区域,我们需要让MenuFlyoutItem填充整个MenuFlyoutPresenter ,为此,我们需要通过设置MenuFlyoutPresenterStyle编辑MenuFlyoutMenuFlyoutPresenterStyle 。 您可以在MenuFlyoutPresenter样式和模板中找到默认的MenuFlyoutPresenter样式。

要设置MenuFlyoutPresenterStyle ,我们可以从网站或Visual Studio中复制默认样式,在“ 文档大纲 ”中选择“ [MenuFlyout] ”并右键单击,然后选择“ 编辑其他模板 ”→“ 编辑MenuFlyoutPresenterStyle ”→“ 编辑副本” ……

在样式中,我们需要通过将其设置为0来删除ItemsPresenter中的Margin

  

然后MenuFlyoutItem周围没有边距。 但这还不够,因为MenuFlyoutPresenter高度为32分钟:

 32 

如果MenuFlyoutItem的高度小于32,则它也无法突出显示整个区域。 要解决此问题,可以将MinHeight属性设置为0

  

或者像在StackPanel设置Margin一样增加MenuFlyoutItem的高度:

     

完整的MenuFlyoutPresenterStyle可能如下:

  

编辑MenuFlyout的风格,你将实现你想要的,我会做那样的事情