将按钮的标签属性设置为整数值并触发触发器
我想做类似以下的事情,但它不起作用。我想使用数据触发器将整数(或任何类型)值设置为我在数据模板中定义的按钮的标签属性。然后,当相应的值设置为按钮的 tag 属性时,在按钮的图像样式内触发触发器。但它似乎并不是这样工作的。如果我设置 x:Null 值,我可以触发触发器,这意味着逻辑没问题。但设置 0 或 1 之类的值不会触发触发器。有什么解决办法吗?
<DataTemplate x:Key="SomeDataTemplateofSomeType">
<Button x:Name="ButtonVisible">
<Button.Template>
<ControlTemplate TargetType="Button">
<Image x:Name="FxImage">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Style.Triggers>
<DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource TemplatedParent},UpdateSourceTrigger=PropertyChanged}" Value="0">
<Setter Property="Source" Value="/Resources/controls/images/fxiconsnone.png" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</ControlTemplate>
</Button.Template>
</Button>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=IsVisible, Value="True">
<Setter Property="Tag" TargetName="ButtonVisible" Value="1" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsVisible, Value="False">
<Setter Property="Tag" TargetName="ButtonVisible" Value="0" />
</DataTrigger>
</DataTemplate.Triggers>
</Datatemplate>
I want to do something like the following but it doesn't work. I want to use a datatrigger to set an integer (or whatever type) value to the Tag Property of a button i define inside my datatemplate. And then inside the button's image style fire a trigger when the corresponding value is set to the tag property of the button. But it doesn't seem to be working this way. If i set an x:Null value i can fire the trigger, that means the logic is ok. But setting a value like 0 or 1 doesn't fire the trigger. Any solutions?
<DataTemplate x:Key="SomeDataTemplateofSomeType">
<Button x:Name="ButtonVisible">
<Button.Template>
<ControlTemplate TargetType="Button">
<Image x:Name="FxImage">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Style.Triggers>
<DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource TemplatedParent},UpdateSourceTrigger=PropertyChanged}" Value="0">
<Setter Property="Source" Value="/Resources/controls/images/fxiconsnone.png" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</ControlTemplate>
</Button.Template>
</Button>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=IsVisible, Value="True">
<Setter Property="Tag" TargetName="ButtonVisible" Value="1" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsVisible, Value="False">
<Setter Property="Tag" TargetName="ButtonVisible" Value="0" />
</DataTrigger>
</DataTemplate.Triggers>
</Datatemplate>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您将绑定到
Image
的DataContext
,而不是绑定到模板化Button
,而是绑定到
TemplatedParent
。附带说明一下,不需要使用两个
DataTriggers
来表示 true 和 false。执行此操作并仅保留
DataTriggers
Example 之一,将以下内容添加到
MainWindow.xaml
MainWindow.xaml.cs
You are binding to the
DataContext
of theImage
and not to the templatedButton
Bind to the
TemplatedParent
instead.On a side note, there is no need to use two
DataTriggers
for true and false. Do this insteadAnd only keep one of the
DataTriggers
Example, add the following to
MainWindow.xaml
MainWindow.xaml.cs