积极答复者
wpf 数据触发器

问题
-
WPF 数据触发器中能不能实现判读数据不等于那个数据,的。比如 数据不等于0,或者不等于null。
我遇到的情况是。但这个数据等于0是,按钮可用, 可是当时数据不等于0,为任何数据是,按钮可用。
- 已编辑 mendeliangyang 2012年3月28日 10:21
答案
-
你好!
DataTrigger 默认的是去判断当绑定数据等于某个值时去执行一些操作,但是我们也可以通过实现 IValueConverter 接口给绑定创建自定义的逻辑。你可以参考以下代码:
public class IsNullConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return (value == null); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new InvalidOperationException("IsNullConverter can only be used OneWay."); } }
Xaml:
<ListBox ItemsSource="{Binding}"> <ListBox.Resources> <conv:IsNullConverter x:Key="isNullConverter"/> </ListBox.Resources> <ListBox.ItemContainerStyle> <Style TargetType ="{x:Type ListBoxItem}"> <Style.Triggers> <DataTrigger Binding="{Binding Field, Converter={StaticResource isNullConverter}}" Value="False"> <Setter Property="Background" Value="Pink"/> </DataTrigger> </Style.Triggers> </Style> </ListBox.ItemContainerStyle> </ListBox>
更多关于这个问题的信息在这个帖子里可以找到。
http://stackoverflow.com/questions/356194/wpf-datatrigger-where-value-is-not-nullHave a nice day,
Kee Poppy [MSFT]
MSDN Community Support | Feedback to us
- 已建议为答案 Jie BaoModerator 2012年3月29日 4:43
- 已标记为答案 Jie BaoModerator 2012年4月1日 15:53
全部回复
-
你好!
DataTrigger 默认的是去判断当绑定数据等于某个值时去执行一些操作,但是我们也可以通过实现 IValueConverter 接口给绑定创建自定义的逻辑。你可以参考以下代码:
public class IsNullConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return (value == null); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new InvalidOperationException("IsNullConverter can only be used OneWay."); } }
Xaml:
<ListBox ItemsSource="{Binding}"> <ListBox.Resources> <conv:IsNullConverter x:Key="isNullConverter"/> </ListBox.Resources> <ListBox.ItemContainerStyle> <Style TargetType ="{x:Type ListBoxItem}"> <Style.Triggers> <DataTrigger Binding="{Binding Field, Converter={StaticResource isNullConverter}}" Value="False"> <Setter Property="Background" Value="Pink"/> </DataTrigger> </Style.Triggers> </Style> </ListBox.ItemContainerStyle> </ListBox>
更多关于这个问题的信息在这个帖子里可以找到。
http://stackoverflow.com/questions/356194/wpf-datatrigger-where-value-is-not-nullHave a nice day,
Kee Poppy [MSFT]
MSDN Community Support | Feedback to us
- 已建议为答案 Jie BaoModerator 2012年3月29日 4:43
- 已标记为答案 Jie BaoModerator 2012年4月1日 15:53
-
两者都可以,比较正统的理解是,通过Style先设置默认值,然后通过触发器触发改变值 -〉 shixin.
不过这个问题,我倒是推荐converter的方案,灵活性好,以后要修改起来也比Style的默认值来的方便。
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
-
>> 是不是 事件触发器,只能作用 动画,故事版
是的.
>> 比如 button 得鼠标悬浮事件,我想改变显示得图片.这个这么做?我在里面找不到任何属性设置.是不是要在故事版里面设置.
如果你要一个完全是XAML的解决方法,那么你可以用事件触发器,然后写一个关键帧动画放在故事板,设置这个图片Source属性。
否则的话,我们是推荐你这个需求用后台代码来实现比较好。
Bob Bao [MSFT]
MSDN Community Support | Feedback to us