【问题标题】:How to get rid of this border around image embed button?如何摆脱图像嵌入按钮周围的边框?
【发布时间】:2016-12-15 13:55:00
【问题描述】:

我正在尝试摆脱按钮周围的白色边框。我正在向Button 添加图像。好像不是按钮本身,而是图片的边框。

这是 XAML,

   <Style x:Key="MyButton" TargetType="Button">
        <Setter Property="OverridesDefaultStyle" Value="True" />
        <Setter Property="Cursor" Value="Hand" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border Name="border" BorderThickness="0" Background="{TemplateBinding Background}" CornerRadius="5" >
                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Opacity" Value="0.5" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

还有Button 本身,

   <Button Name="Button2" Content="stuff" Height="25" Grid.Column="1" Grid.Row="1"
          Style="{StaticResource MyButton}" Click="Button2_OnClick">
              <Button.Background>
                  <ImageBrush ImageSource="Images\ButtonEnterLight.png"></ImageBrush>
              </Button.Background>
   </Button>

这就是结果,

我还需要做什么才能让它消失?上周一直困扰着我。

编辑:这是 Live Visual Tree 的屏幕截图,展开到第一个按钮,其中嵌入了图像。

【问题讨论】:

  • 如果投反对票的人愿意分享他们投反对票的原因会很好吗?
  • 你用Snoop或者VS检查过边框是从哪里来的吗?
  • @Lennart,原谅我,我不知道 Snoop 是什么,但是我在哪里可以找到这个寄宿生在 VS 中的位置?单击边框只是注册它是按钮的一部分,但在非图像嵌入按钮上,没有使用相同 Style 的边框。
  • 你有 Visual Studio 2015 吗?它包含 UI 调试工具(此处解释为 msdn.microsoft.com/en-us/library/mt270227.aspx)。您要做的是在 Live Visual Tree 中搜索您的 Button,然后检查该边框的来源。我怀疑这是您在 ControlTemplate 中的边界。你需要那个吗?如果您根本不需要边框,则可以将其删除,并且模板中只有 ContentPresenter。
  • 将此添加到您的按钮样式&lt;Setter Property="FocusVisualStyle" Value="{x:Null}"/&gt; 或仅输入 BorderThickness=0

标签: c# wpf xaml


【解决方案1】:

好的,所以FocusVisualStyle 是一个经常被忽视的System.Windows.Style 属性值,在许多情况下它添加了一个资源来帮助可视化控件何时具有活动焦点。

在您正在使用的Style 模板中可能并不总是很明显,因为默认为空静态样式,但通常在运行时值有效。因此,即使您已经为模板中的元素声明了触发器或视觉状态,通常最终会发生的事情。在您未明确设置的元素上会出现幽灵般的边框或其他视觉效果。

要解决这个问题,您可以做几件事。

  • 可以覆盖属性globally
  • 可以在模板的实例中使用 setter 覆盖它,例如 &lt;Setter Property="FocusVisualStyle" Value="{x:Null}"/&gt;

    [该值实际上也可以是Transparent,无论哪种方式,您只是想声明您不希望 BorderThickness 有颜色。]

  • 您也可以通过BorderThickness="0" 将边框全部一起丢弃,从而在实例中丢弃它

不过,总体目标是只处理 FocusVisualStyle 的那个属性,或者清除它的结果,或者隐藏它,这样它就不再是一个视觉对象,你可以继续你的一天了。

希望这会有所帮助,干杯。

【讨论】:

  • 再次感谢您的详细解释,我相信这将在未来对其他人有所帮助。
  • 希望如此。我知道当我第一次开始研究自定义 UI 时,它让我陷入了几次困境。节日快乐!
猜你喜欢
  • 2023-02-04
  • 1970-01-01
  • 2021-08-10
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
相关资源
最近更新 更多