【问题标题】:Color the textbox of a datepicker backend WPF为日期选择器后端 WPF 的文本框着色
【发布时间】:2013-07-23 03:23:11
【问题描述】:

我想更改边框 datepicker 的颜色,我在 xaml 代码中看到了更改的解决方案,但想更改它的后端。

我的代码:

public static bool checkDate(DatePicker dpk)
{
   TextBox tb = (TextBox)dpk.Template.FindName("PART_TextBox", dpk);
   Border bd = (Border)tb.Template.FindName("Bd", tb);

   if (dpk.SelectedDate == null)
   {
       bd.BorderBrush = Brushes.Red;
       return false;
   }

   bd.BorderBrush = Brushes.Black;
   return true;
}

我使用没有问题

Border bd = (Border)tb.Template.FindName("Bd", tb);

对于我的其他文本框等。但是在着色时出现 nullException 错误,显然它无法检测到日期选择器在此特定代码行中使用的文本框的边框。有什么建议吗?

【问题讨论】:

  • 哪一行代码抛出空异常?我试过了,在我的情况下效果很好。

标签: c# wpf colors datepicker


【解决方案1】:

如果我正确理解您的意图,您会尝试进行一些数据验证并突出显示缺失的字段。下面的示例应该可以工作;没有必要比文本框部分看得更远

    public static bool checkDate(DatePicker dpk)
    {
        TextBox tb = (TextBox)dpk.Template.FindName("PART_TextBox", dpk);

        if (dpk.SelectedDate == null)
        {
            tb.BorderThickness = new Thickness(2);
            tb.BorderBrush = Brushes.Red;
            return false;
        }

        tb.BorderThickness = new Thickness(0);
        tb.BorderBrush = Brushes.Black;
        return true;
    }

以后,请尝试使用http://snoopwpf.codeplex.com/ 在运行时查看可用的部件/属性 - 这将为您节省大量时间

【讨论】:

  • 如果你设置的是:BorderThickness = new Thickness(0);,那你为什么需要BorderBrush = Brushes.Black; ?如果粗细为零,则没有设置 BorderBrush 的意义。
  • '因为我真的不知道代码的初衷?这只是一个示例 - 您可以通过在其他地方将其他属性设置为固定值来操作厚度或颜色来实现相同的效果;我选择留下两个让 OP 选择
  • 这没有任何意义。 OP 询问他无法从 ControlTemplate 中找到一些模板部分并获得空值。
  • 不,OP 说他“想更改边框日期选择器的颜色”。顺便说一句,默认情况下其厚度为零,因此即使您设法将其更改为另一种颜色,它也不会可见。现在,你不知道他为什么想要那个,以及他之后会用改变的颜色做什么;我已经看到检查控件颜色的生产代码确实确定输入验证是否成功。所以,为了说明它正在工作,我来回改变厚度和颜色 - 当你整合样本时应该很明显要删除什么
  • 你读过完整的问题吗?我猜你错过了这一行“但我在着色时遇到了 nullException 错误”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 2015-05-27
  • 1970-01-01
  • 2013-05-17
相关资源
最近更新 更多