【问题标题】:Get rid of button red border in WPF?摆脱 WPF 中的按钮红色边框?
【发布时间】:2014-06-03 07:17:47
【问题描述】:

我重新问了一个类似的问题。在我的特定情况下,答案似乎不起作用。我已包含详细信息。

我有一个 ComboBox,并且在 ComboBox 内每个项目都有一个 ToggleButton。当我单击 ToggleButton 时,有一个我想去掉的红色轮廓。如何删除按钮周围的红色轮廓?在 ControlTemplate 中,我设置 BorderThickness=”0”,BorderBrush=”Transparent”,Focusable=”false”。这些都是其他帖子提到的。

<!--Xaml for ComboBox: -->
<TimestampComboBox 
  Style="{DynamicResource PlotComboBoxStyle}"
  IsSynchronizedWithCurrentItem="True"
  …
>
  <TimestampComboBox.ItemsSource >…
  </TimestampComboBox.ItemsSource>
  <TimestampComboBox.ItemTemplate>
    <DataTemplate>
      <StackPanel Orientation="Vertical">
        <DockPanel Width="174" LastChildFill="False">
          <ToggleButton DockPanel.Dock=
            Style="{DynamicResource SampleAddToggleButtonStyle}"
          >
            <ToggleButton.Content>
              <Rectangle Height="10" Width="10"/>
            </ToggleButton.Content>
          </ToggleButton>
        </DockPanel>
      </StackPanel>
    </DataTemplate>
  </TimestampComboBox.ItemTemplate>
</TimestampComboBox>

<!--SampleAddToggleButtonStyle: -->
<Style x:Key="SampleAddToggleButtonStyle" TargetType="{x:Type ToggleButton}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ToggleButton}">
        <Border Name="border" BorderThickness="0" BorderBrush="Transparent">
          <ContentPresenter Content="{TemplateBinding Content}" />
        </Border>
        <ControlTemplate.Triggers>
           …
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

【问题讨论】:

  • Red-Outline 出现在何处/何时/为何?你的意思是默认的失败验证指示器吗?您是如何在 ToggleButton 上获得它的?
  • 当我单击嵌入在 ComboBox 中的按钮时,按钮周围有一个红色轮廓。即使点击了几次,不需要的红色轮廓仍然存在。

标签: wpf button togglebutton


【解决方案1】:

抱歉,我想你不明白发生了什么。让我重新开始。

您看到的很可能是 WPF 在某些地方执行的错误检查的效果。如果在绑定操作期间“验证步骤”失​​败(即您在绑定到 double 变量的文本框中输入了 KAJSHDKAS),WPF 会在控件上设置“验证错误”标志。默认情况下,它通过该字段周围的简单细红色轮廓来显示。

这意味着您的代码中有失败。很严重。您必须检查到底发生了什么并纠正错误。

通常,这是某些转换器或某些绑定抛出异常的结果。检查调试器的输出面板并查看是否报告了任何“第一次机会异常”。甚至可能是一些堆栈跟踪。如果您在“红色轮廓”出现时看到其中任何一种情况发生,您必须简单地解决问题,以免引发异常,红色轮廓就会消失。

如果您不修复它,并且只是隐藏错误通知,那么在稍后的某个时间点,您可能会发现某些绑定停止工作,或者某些样式未应用,或者某些 UI元素未正确绘制(即它们被大红色 X 错误标记替换)。

如果输出日志中没有可见异常,则查找有关失败绑定的任何消息。当绑定无法将某些值转换为某些属性或反之亦然时,它也可能导致设置错误标志。它通常不会以异常飞来飞去而结束,而是会在日志中写入一条简单的消息,并准确说明哪个控件上的哪个绑定失败。在这种情况下,您将需要跟踪无法转换为绑定属性的违规值是什么,并且您需要修复代码以确保仅提供可转换的值。

【讨论】:

  • 我已在调试器中打开所有异常并检查了日志。我没有收到任何异常,也没有在日志中看到任何内容。
  • 感谢您的帮助。转换器方法中引发了异常。奇怪的是,在 VS 2013 中没有记录异常。在 VS 2012 中有一个例外。然而,在这两种情况下,红色的错误轮廓框都在那里。
猜你喜欢
  • 2011-02-23
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 2014-03-10
  • 2018-07-24
  • 1970-01-01
  • 2023-02-04
  • 1970-01-01
相关资源
最近更新 更多