【问题标题】:Change color of control to default将控件颜色更改为默认值
【发布时间】:2012-02-21 20:39:06
【问题描述】:

我确实有一个文本框。当出现错误时,我将borderbrush 设置为新的SolidColorBrush(Colors.Red)。修复错误后,我想切换到文本框边框的默认颜色。我是在代码隐藏而不是 xaml 中做的。

但是它取决于系统。我注意到有类似

SystemColor.ActiveControl 等。我应该使用这些,如果是,哪一个是文本框的默认边框?

我还注意到有类似 Textbox.borderbrushproperty.defaultmetadata.defaultvalue 之类的东西,但我无法正常工作。

任何想法如何切换到默认边框画笔?谢谢。

【问题讨论】:

  • 在将颜色更改为红色之前跟踪默认颜色。
  • 不确定 WPF 是否支持它,但 Silverlight 有一个 IDataErrorInfo 接口,它将在绑定到有错误的属性的任何控件周围放置一个红色框。也许这会比你正在做的更容易。

标签: c# .net wpf xaml


【解决方案1】:

您必须在代码隐藏中执行此操作吗?如果没有,您可以使用Trigger,它只会在满足触发条件时更改边框颜色。

<Style x:Key="MyTextBoxStyle" TargetType="{x:Type TextBox}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=MyUserControl, Path=HasErrors}">
            <Setter Property="BorderBrush" Value="Red" />
        </DataTrigger>
    </Style.Triggers>
</Style>

【讨论】:

  • 这是迄今为止最好和最简单的答案
【解决方案2】:

为什么不在启动时保存初始值并使用它呢?您应该可以使用系统颜色,但如果您更改了默认颜色,这将继续有效。

private Color _defBtnColor;
public MyUserControl()
{
    _defBtnColor = someButton.Foreground;
}  

private void SetBackToDefault()
{
    someButton.Foreground = _defBtnColor;
}

【讨论】:

  • 我知道这是一个选项,但如果用户在运行应用程序时切换主题则不起作用。我知道这种情况很少见,但希望有干净的解决方案
  • @VojtechRuzicka:这应该不是问题。默认情况下,它将使用动态的系统颜色。如果您曾经更改默认设置,那么,您更改它是有原因的,这仍然有效。你真的试过测试吗?换系统主题不行吗?
【解决方案3】:

试试:

control.BackColor = Color.FromKnownColor(KnownColor.Window);

有关详细信息,请参阅Color.FromKnownColor on MSDN。

【讨论】:

    【解决方案4】:

    也许我参加聚会有点晚了,但我想你是在问如何将颜色更改为系统默认控制?

    someControl.BackColor = SystemColors.Control;
    

    或

    sslEditMode.BackColor = SystemColors.ButtonFace;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      相关资源
      最近更新 更多