无论模板的设置如何,Visual Studio(2019 - 尚未在其他版本上测试)似乎都在强制从 Visual Studio 项模板添加的任何 .xaml 文件将其构建操作设置为 Page。例如:
<TemplateContent>
<References />
<ProjectItem ReplaceParameters="true" ItemType="EmbeddedResource" CustomTool="" TargetFileName="$fileinputname$.xaml">Page1.xaml</ProjectItem>
<ProjectItem ReplaceParameters="true" ItemType="EmbeddedResource" CustomTool="" TargetFileName="$fileinputname$.cs">Page1.xaml</ProjectItem>
</TemplateContent>
Run Code Online (Sandbox Code Playgroud)
这只是两次添加相同的 XAML 文件,以证明当作为 .cs 文件添加时,一切都按预期工作,构建操作对应于所需的 ItemType。但是,当使用 .xaml 扩展名添加时,构建类型会强制为 Page - 覆盖 ItemType 规范。
这是 Visual Studio 项模板解析器的预期行为,如果是,有什么方法可以覆盖它吗?我所需要的只是将 XAML 文件正确地视为 XAML 文件(以启用设计器),并将其构建操作设置为嵌入式资源。
反正有没有隐含地执行以下模式?
[DefaultValue(true)]
public bool SomeBooleanProperty { get; set; } = true;
Run Code Online (Sandbox Code Playgroud)
在两个地方重复默认值似乎只是在某处乞求错误,无论如何似乎都是多余的.我可以想象一些将DefaultValueAttribute自动设置为默认值(或任何值)的情况是不可取的,但我认为这些将是例外而不是规则.在这些情况下,解决方案只是在构造函数中设置默认值,而不是在我认为比冗余代码更轻松的声明中.
我有一个有两个的对象WhenAnyValues:
this.WhenAnyValue(x => x.SomeInt)
.Select(x => "Bar" + x)
.ToPropertyEx(this, x => x.SomeString);
this.WhenAnyValue(x => x.SomeInt)
.Select(x => "Foo" + x)
.ToPropertyEx(this, x => x.SomeString);
Run Code Online (Sandbox Code Playgroud)
使用 1-4 作为输入进行测试,得出:
1
Foo0
Foo1
2
Foo2
3
Foo3
4
Foo4
Run Code Online (Sandbox Code Playgroud)
交换方法的顺序WhenAnyValue,使 Bar 出现在最后,会导致仅触发 Bar。所以看来后者WhenAnyValue在某种程度上覆盖了第一个。这是一个错误还是有意的行为?如果这是一个错误,那么它来自 ReactiveUI 版本 16.3.10。
如果对项目进行过滤,例如,仅将 Foo 设置为偶数值,将 Bar 仅设置为奇数值,也会出现此问题。您仍然只能得到WhenAnyValue最后被调用的那个。
Foo0 是由于延迟执行造成的,与此问题无关。