我正在尝试将一个转换object为一个bool类型,并希望转换bool和Nullable<bool>类型.我还想确保在可能的情况下进行适当的演员表演.所以我有以下代码:
if (value is bool)
{
boolValue = (bool) value;
}
else if (value is bool? && ((bool?)value).HasValue)
{
boolValue = ((bool?) value).Value;
}
else
{
throw new ArgumentException("Value must be a boolean type");
}
Run Code Online (Sandbox Code Playgroud)
ReSharper 2016告诉我value is bool?在if语句堆栈中总会评估为false.这是为什么?这意味着Nullable<bool>不会继承object(不可能)或value is bool将会捕获bool?.
ReSharper 2016也有可能出现错误; 我看到实现System.Windows.Controls.BooleanToVisibilityConverter.Convert几乎完全相同.我怀疑WPF核心会有这样的错误,让我相信这是ReSharper的一个问题.
我正在尝试创建一个MVVM WPF应用程序,该应用程序允许我在窗口中绘制一个矩形。现在,我已经创建了一个画布元素来覆盖整个屏幕。继等问题,并指导,它看起来像使用鼠标事件命令绑定(如只有这样MouseDown,MouseUp等)是组装使用System.Windows.Interactivity并添加EventTriggers的鼠标事件。但是,这似乎不适用于canvas元素。单击,单击/按住,单击/拖动,右键单击,它们都不会触发我的命令的Execute方法。
canvas元素支持哪些事件?为什么会MouseDown或PreviewMouseDown无法正常工作?
窗口的XAML:
<Window x:Class="RutheniumReader.SnippingWindow.SnippingShade"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:snippingWindow="clr-namespace:MyApp.SnippingWindow"
mc:Ignorable="d"
Title="Snipping Window"
WindowState="Maximized"
Background="Black"
>
<Window.DataContext>
<snippingWindow:SnippingWindowViewModel />
</Window.DataContext>
<Canvas x:Name="Canvas">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDown">
<i:InvokeCommandAction Command="{Binding Path=MouseDownCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Canvas>
</Window>
Run Code Online (Sandbox Code Playgroud)
出于测试目的,我尝试了以下运气不佳的事件:
Button画布内的元素,则可以使用Button元素一起使用