xaml - 如何在 UWP 中仅读取 CalendarView 控件

标签 xaml calendar uwp uwp-xaml

在我的 UWP 应用中,我添加了 CalendarView 并以编程方式选择了多个日期。现在我想让它只读给最终用户。但该控件不提供此类功能,并且不能选择 IsEnabled = False。 请让我知道一种使控件只读的方法。 谢谢。

注意:我在键盘上遇到了这个问题。当用户按下回车键或空格键时,日历会更改其 View 。我想让它静态。

最佳答案

设置IsEnabledFalse是正确的方法。我猜你不想使用它的原因是因为这样做会使整个控件变暗。所以真正的问题归结为 - 如何禁用该控件,同时保持其外观不变?

通常,禁用(即 IsEnabled="False" )控件的外观在 Disabled 中定义。其风格内的状态。在您的情况下,事情会变得有点复杂,因为您需要更新多个样式,如 CalendarView是一个复杂的控件。

这是如何完成的。

首先,您需要找到 default style CalendarView的控制并将其放入您的 App.xaml 中。然后,搜索<VisualState x:Name="Disabled">并注释掉该视觉状态中的所有内容。应该有两个,因为第一个用于向上/向下按钮,第二个用于星期几文本.

除此之外,您还需要手动更新每个 CalendarViewDayItem 的颜色仅仅因为TextBlock用于显示的天数不在其样式内。

要在代码中执行此操作,请转到我的答案 here并复制Children扩展方法,那么你只需要在 Loaded 中运行以下代码即可事件。请注意,您可能想给它一点延迟,因此 Disabled状态已正确应用。

Loaded += async (s, e) =>
{
    await Task.Delay(100);
    var dayItems = MyCalendarView.Children().OfType<CalendarViewDayItem>();
    foreach (var dayItem in dayItems)
    {
        var textBlock = dayItem.Children().OfType<TextBlock>().Single();
        textBlock.Foreground = new SolidColorBrush(Colors.Black);
    }
};

完成所有这些后,您的 CalendarView现在,当控件实际被禁用时,它会像平常一样显示。

希望这有帮助!

关于xaml - 如何在 UWP 中仅读取 CalendarView 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45912704/

相关文章:

wpf - XAML 中的数据触发器/样式快速

c# - Binding时如何获取类型的属性

c# - 如何在 Windows Phone 8 中始终显示数字键盘?

java - 将时间/日期时间/数据转换为 java.util.Calendar?

java - 在 Android 日历中添加用户无法修改的事件/提醒

c# - 非事件项目的列表框系统颜色?

json - GSON 将带有日历的对象反序列化为带有 Mongo 日期的 json 并返回

c# - 尝试将文件从 UWP 应用程序上传到 Flask restful web api,失败

c# - 在文本框中显示变量

sqlite - 如何在UWP应用程序中的应用程序文件夹之外访问文件(如SQLite数据库)?