Ric*_*ich 47 .net data-binding wpf ivalueconverter
有没有办法使用现有的WPF BooleanToVisibilityConverter转换器但是将False值转换为Hidden而不是默认的Collapsed,或者我应该自己编写?我正在进行一个项目,在这个项目中,做这样简单的事情会带来巨大的开销(共享的东西进入一个单独的解决方案,而重建/签入/合并过程是一个过度生长的变异庞然大物的过程),所以我更愿意,如果我可以将参数传递给现有参数,而不是跳过刚才提到的箍.
Dre*_*kes 118
我找到了最简单,最好的解决方案:
[ValueConversion(typeof(bool), typeof(Visibility))]
public sealed class BoolToVisibilityConverter : IValueConverter
{
public Visibility TrueValue { get; set; }
public Visibility FalseValue { get; set; }
public BoolToVisibilityConverter()
{
// set defaults
TrueValue = Visibility.Visible;
FalseValue = Visibility.Collapsed;
}
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
if (!(value is bool))
return null;
return (bool)value ? TrueValue : FalseValue;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
if (Equals(value, TrueValue))
return true;
if (Equals(value, FalseValue))
return false;
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
使用它时,只需在XAML中配置一个完全符合您需要的版本,如下所示:
<Blah.Resources>
<local:BoolToVisibilityConverter
x:Key="BoolToHiddenConverter"
TrueValue="Visible" FalseValue="Hidden" />
</Blah.Resources>
Run Code Online (Sandbox Code Playgroud)
然后在一个或多个绑定中使用它,如下所示:
<Foo Visibility="{Binding IsItFridayAlready,
Converter={StaticResource BoolToHiddenConverter}}" />
Run Code Online (Sandbox Code Playgroud)
这个简单的解决方案解决隐藏/折叠的偏好以及反转/否定效果.
SILVERLIGHT USERS必须删除[ValueConversion]声明,因为该属性不是Silverlight框架的一部分.在WPF中也不是严格要求,但与内置转换器一致.
Qua*_*ter 29
不幸的是,它只会转换为Visible或Collapsed,因此您必须自己编写.这是根据Reflector的Convert方法:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bool flag = false;
if (value is bool)
{
flag = (bool)value;
}
else if (value is bool?)
{
bool? nullable = (bool?)value;
flag = nullable.HasValue ? nullable.Value : false;
}
return (flag ? Visibility.Visible : Visibility.Collapsed);
}
Run Code Online (Sandbox Code Playgroud)
你能不能只使用样式而不是转换器?代码类似于:
<Style x:Key="Triggers" TargetType="Button">
<Style.Triggers>
<Trigger Property="{Binding ...}" Value="false">
<Setter Property = "Visibility" Value="Hidden"/>
</Trigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
您需要提供自己绑定的属性以指向您的 bool 属性。
| 归档时间: |
|
| 查看次数: |
59924 次 |
| 最近记录: |