如何为WinRT XAML控件提供禁用的外观?

时间:2014-11-07 20:38:09

标签: c# datepicker winrt-xaml disabled-input winrt-component

我有一个包含DatePicker控件和相关TextBlocks的弹出按钮,允许用户选择日期范围标准。我还有一个“使用所有日期”ToggleSwitch。如果已将其设置为“开”,我想禁用日期范围控件,或者至少为它们提供禁用的外观。

我试过这种方式:

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;
    }
}

1 个答案:

答案 0 :(得分:2)

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