<TextBlock Text="{c:Binding BoolA and BoolB}" />
<TextBlock Text="{c:Binding BoolA or BoolB}" />
<TextBlock Text="{c:Binding BoolA and BoolB or BoolB}" />
修改一下界面
<StackPanel>
<TextBlock>
<Run Text="A=" />
<Run Text="{Binding BoolA}" />
</TextBlock>
<TextBlock>
<Run Text="B=" />
<Run Text="{Binding BoolB}" />
</TextBlock>
<TextBlock Text="A and B" />
<TextBlock Text="{c:Binding BoolA and BoolB}" />
<TextBlock Text="A or B" />
<TextBlock Text="{c:Binding BoolA or BoolB}" />
</StackPanel>
<TextBox Text="{c:Binding A+B+C}"/>
<TextBox Text="{c:Binding A-B-C}"/>
<TextBox Text="{c:Binding A*(B+C)}"/>
<TextBox Text="{c:Binding 2*A-B*0.5}"/>
<TextBox Text="{c:Binding A/B, StringFormat={}{0:n2} --StringFormat is used}"/> {with string format}
<TextBox Text="{c:Binding A%B}"/>
<TextBox Text="{c:Binding '(A == 1) ? 10 : 20'}"/> {ternary operator}
<CheckBox Content="!IsChecked" IsChecked="{c:Binding !IsChecked}"/>
<TextBox Text="{c:Binding 'IsChecked and IsFull'}"/> {'and' is equvalent of '&&'}
<TextBox Text="{c:Binding '!IsChecked or (A > B)'}"/> {'or' is equvalent of '||', but you can leave '||'}
<TextBox Text="{c:Binding '(A == 1) and (B less= 5)'}"/> {'less=' is equvalent of '<='}
<TextBox Text="{c:Binding (IsChecked || !IsFull)}"/>
因为在 xaml 不能使用 &&
||
<=
所以需要使用 and or ‘less=’ 替换
另外对于 :
之前需要添加空格,如下面代码
<TextBox Text="{c:Binding '(A == 2)?IsChecked : IsFull}"/> <!-- right -->
<TextBox Text="{c:Binding '(A == 2)?IsChecked :!IsFull}"/> <!-- right -->
<TextBox Text="{c:Binding '(A == 2) ? IsChecked :4 + IsFull}"/> <!-- right -->
这些都是对的,但是下面的代码是无法运行
<TextBox Text="{c:Binding '(A == 2)?IsChecked:IsFull}"/> <!-- wrong -->
可以绑定静态的值,静态的值的写法 xmlNamespace:Class.StaticProperty.NestedProperty
命名空间下的类的静态属性的属性
对于经常计算值这里也可以简单使用,如 Math 里面的方法
<TextBox Text="{c:Binding Math.Sin(A*Math.PI/180), StringFormat={}{0:n5} }"/>
<TextBox Text="{c:Binding A*Math.PI}" />
枚举值也可以点命名空间的枚举的值,可以用来判断 xmlNamespace:EnumClass.Value
如在 Foo 枚举里面有 A 这个值
<CheckBox IsChecked="{c:Binding 'Foo==local:Foo.A'}" />
经常会将 bool 转换为 Visibility 这个库也有简单的方法
<Button Content="TargetButton" Visibility="{c:Binding HasPrivileges, FalseToVisibility=Collapsed}"/>
or just
<Button Content="TargetButton" Visibility="{c:Binding !HasPrivileges}"/>
<Button Content="TargetButton" Visibility="{c:Binding !HasPrivileges, FalseToVisibility=Hidden}"/>
如果需要在样式使用,需要通过 RelativeSource 找到方法