在我的 UWP 应用中,我添加了 CalendarView 并以编程方式选择了多个日期。现在我想让它只读给最终用户。但该控件不提供此类功能,并且不能选择 IsEnabled = False。 请让我知道一种使控件只读的方法。 谢谢。
注意:我在键盘上遇到了这个问题。当用户按下回车键或空格键时,日历会更改其 View 。我想让它静态。
最佳答案
设置IsEnabled
至False
是正确的方法。我猜你不想使用它的原因是因为这样做会使整个控件变暗。所以真正的问题归结为 - 如何禁用该控件,同时保持其外观不变?
通常,禁用(即 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/