0

我有一个弹出窗口,其中包含 DatePicker 控件和关联的 TextBlocks,允许用户选择日期范围标准。我还有一个“使用所有日期”切换开关。如果已将其设置为“开”,我想禁用日期范围控件,或者至少让它们看起来被禁用。

我试过这样:

private void tglswtchAllDates_Toggled(object sender, RoutedEventArgs args)
{
    Color enabledColor = Colors.Black;
    Color disabledColor = Colors.Gray;

    txtblckDateFrom.Foreground = enabledColor;
    txtblckDateTo.Foreground = enabledColor;
    txtblckInclusive.Foreground = enabledColor;

    bool allDates = tglswtchAllDates.IsOn;

    datePickerFrom.Enabled = !allDates;
    datePickerTo.Enabled = !allDates;

    if (allDates)
    {
        txtblckDateFrom.Foreground = disabledColor;
        txtblckDateTo.Foreground = disabledColor;
        txtblckInclusive.Foreground = disabledColor;
    }
}

...但是我得到了各种编译错误,例如“无法将类型'Windows.UI.Color'转换为'Windows.UI.Xaml.Media.Brush' ”和“无法隐式转换类型'Windows .UI.Color' 到 'Windows.UI.Xaml.Media.Brush'和“' Windows.UI.Xaml.Controls.DatePicker' 不包含 'Enabled' 的定义,并且没有扩展方法 'Enabled' 接受第一个可以找到“Windows.UI.Xaml.Controls.DatePicker”类型的参数(您是否缺少 using 指令或程序集引用?)

那么,什么是一种经过验证的真实——或者至少在理论上是合理的——实现这一目标的方法呢?

更新

在菲利普的帮助下,我:

private void tglswtchAllDates_Toggled(object sender, RoutedEventArgs args)
{
    bool allDates = tglswtchAllDates.IsOn;

    datePickerFrom.IsEnabled = !allDates;
    datePickerTo.IsEnabled = !allDates;

    if (allDates)
    {
        txtblckDateFrom.Opacity = 0.5;
        txtblckDateTo.Opacity = 0.5;
        txtblckInclusive.Opacity = 0.5;
    }
    else
    {
        txtblckDateFrom.Opacity = 1.0;
        txtblckDateTo.Opacity = 1.0;
        txtblckInclusive.Opacity = 1.0;
    }
}
4

1 回答 1

2

最好的方法是简单地IsEnabled在控件上设置属性。它将适当地更新视觉状态。如果你有一些良好的视觉感,想尝试设计“更好的禁用状态外观”——你可以修改控件模板,将禁用状态的视觉状态更改为使用不同的颜色。

于 2014-11-07T21:56:00.160 回答