自定义控件属性根据Tag值变化

Nick_Ngai 2017-07-20 02:33:13
我想自定义Button样式,然后根据Tag传入值来改变IsEnabled属性,这样继承这个样式的Button只需要设置Tag就可以控制属性了,不需要每个Button都写逻辑。
我这样写的会报错:
<Setter Property="IsEnabled" Value="{TemplateBinding Tag,Converter={StaticResource IsEnabledConverter}}"/>
这个是后台写的IConverter返回True或False
需要怎样设置呢?
...全文
224 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Nick_Ngai 2017-07-20
  • 打赏
  • 举报
回复
引用 10 楼 duanzi_peng 的回复:
[quote=引用 9 楼 anboat 的回复:] [quote=引用 8 楼 duanzi_peng 的回复:] [quote=引用 7 楼 anboat 的回复:] [quote=引用 6 楼 duanzi_peng 的回复:] 你没必要写转化类,tag是object类型的,把tag直接赋值为True,或者False, xaml编译器里 会自动对tag值进行转换。 <Setter Property="IsEnabled" Value="{Binding Path=Tag}"/>
我那个转化是把tag的值计算得到true或false,如果把tag直接赋值为True,或者False,这个和直接设置IsEnabled没什么区别啊[/quote] 是的,必须通过绑定Tag值来设置? 你的需求是 Tag 不能设置为True或者False,只能通过其它的值,比如0,1 来转换么[/quote] 是的,Tag不能直接设置True或False,只能是其他值。 所以现在怎么能在自定义样式中取到Button的Tag值,就可以跑通了[/quote] 这样,
<Setter Property="IsEnabled" Value="{Binding RelativeSource={RelativeSource Self},Path=Tag,Converter={StaticResource  IsEnabledConverter}}"></Setter>
[/quote] 谢谢版主,现在可以了
  • 打赏
  • 举报
回复
引用 9 楼 anboat 的回复:
[quote=引用 8 楼 duanzi_peng 的回复:] [quote=引用 7 楼 anboat 的回复:] [quote=引用 6 楼 duanzi_peng 的回复:] 你没必要写转化类,tag是object类型的,把tag直接赋值为True,或者False, xaml编译器里 会自动对tag值进行转换。 <Setter Property="IsEnabled" Value="{Binding Path=Tag}"/>
我那个转化是把tag的值计算得到true或false,如果把tag直接赋值为True,或者False,这个和直接设置IsEnabled没什么区别啊[/quote] 是的,必须通过绑定Tag值来设置? 你的需求是 Tag 不能设置为True或者False,只能通过其它的值,比如0,1 来转换么[/quote] 是的,Tag不能直接设置True或False,只能是其他值。 所以现在怎么能在自定义样式中取到Button的Tag值,就可以跑通了[/quote] 这样,
<Setter Property="IsEnabled" Value="{Binding RelativeSource={RelativeSource Self},Path=Tag,Converter={StaticResource  IsEnabledConverter}}"></Setter>
Nick_Ngai 2017-07-20
  • 打赏
  • 举报
回复
引用 8 楼 duanzi_peng 的回复:
[quote=引用 7 楼 anboat 的回复:] [quote=引用 6 楼 duanzi_peng 的回复:] 你没必要写转化类,tag是object类型的,把tag直接赋值为True,或者False, xaml编译器里 会自动对tag值进行转换。 <Setter Property="IsEnabled" Value="{Binding Path=Tag}"/>
我那个转化是把tag的值计算得到true或false,如果把tag直接赋值为True,或者False,这个和直接设置IsEnabled没什么区别啊[/quote] 是的,必须通过绑定Tag值来设置? 你的需求是 Tag 不能设置为True或者False,只能通过其它的值,比如0,1 来转换么[/quote] 是的,Tag不能直接设置True或False,只能是其他值。 所以现在怎么能在自定义样式中取到Button的Tag值,就可以跑通了
  • 打赏
  • 举报
回复
引用 7 楼 anboat 的回复:
[quote=引用 6 楼 duanzi_peng 的回复:] 你没必要写转化类,tag是object类型的,把tag直接赋值为True,或者False, xaml编译器里 会自动对tag值进行转换。 <Setter Property="IsEnabled" Value="{Binding Path=Tag}"/>
我那个转化是把tag的值计算得到true或false,如果把tag直接赋值为True,或者False,这个和直接设置IsEnabled没什么区别啊[/quote] 是的,必须通过绑定Tag值来设置? 你的需求是 Tag 不能设置为True或者False,只能通过其它的值,比如0,1 来转换么
Nick_Ngai 2017-07-20
  • 打赏
  • 举报
回复
引用 6 楼 duanzi_peng 的回复:
你没必要写转化类,tag是object类型的,把tag直接赋值为True,或者False, xaml编译器里 会自动对tag值进行转换。 <Setter Property="IsEnabled" Value="{Binding Path=Tag}"/>
我那个转化是把tag的值计算得到true或false,如果把tag直接赋值为True,或者False,这个和直接设置IsEnabled没什么区别啊
  • 打赏
  • 举报
回复
你没必要写转化类,tag是object类型的,把tag直接赋值为True,或者False, xaml编译器里 会自动对tag值进行转换。 <Setter Property="IsEnabled" Value="{Binding Path=Tag}"/>
Nick_Ngai 2017-07-20
  • 打赏
  • 举报
回复
引用 4 楼 duanzi_peng 的回复:
[quote=引用 3 楼 anboat 的回复:] [quote=引用 1 楼 duanzi_peng 的回复:] 这个不是放到模板里的吧,改成Binding,不用TemplateBinding。
<Setter Property="IsEnabled" Value="{Binding Path=Tag,Converter={StaticResource IsEnabledConverter}}"/> 这样吗?这样不行[/quote] 那你把错误 贴出来呀,问题不贴出错误,不好看出来那个地方有错。[/quote]
  • 打赏
  • 举报
回复
引用 3 楼 anboat 的回复:
[quote=引用 1 楼 duanzi_peng 的回复:] 这个不是放到模板里的吧,改成Binding,不用TemplateBinding。
<Setter Property="IsEnabled" Value="{Binding Path=Tag,Converter={StaticResource IsEnabledConverter}}"/> 这样吗?这样不行[/quote] 那你把错误 贴出来呀,问题不贴出错误,不好看出来那个地方有错。
Nick_Ngai 2017-07-20
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
这个不是放到模板里的吧,改成Binding,不用TemplateBinding。
<Setter Property="IsEnabled" Value="{Binding Path=Tag,Converter={StaticResource IsEnabledConverter}}"/> 这样吗?这样不行
Nick_Ngai 2017-07-20
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
这个不是放到模板里的吧,改成Binding,不用TemplateBinding。
怎么写?
  • 打赏
  • 举报
回复
这个不是放到模板里的吧,改成Binding,不用TemplateBinding。

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧