【发布时间】:2014-09-13 12:04:50
【问题描述】:
我最近一直在阅读触发器并试图将其合并到我的应用程序中,但我一直认为触发器的行为类似于 if 语句,如果此属性具有此值,请对控件执行此操作。
我想知道我们是否可以在另一个触发器中更改不同控件的属性?我希望删除动态创建的额外行或仅在隐藏按钮或窗口上有特定标签文本时将按钮的宽度增加 3 列。
我试图弄清楚如何做到这一点,但我正在尝试的任何事情都要求我只更改触发器内的控件的属性,它不允许我更改控制在触发器之外。
这是我想做的:
<Style x:Key="Triggers" TargetType="{x:Type Label}">
<Style.Triggers>
<Trigger Property="Label.Content" Value="Test Label1: ">
<Setter TargetName="Button1" Property="Grid.ColumnSpan" Value="3" /> 'Error 13 Cannot find the Trigger target 'Button1'. (The target must appear before any Setters, Triggers, or Conditions that use it.)
</Trigger>
</Style.Triggers>
</Style>
我的想法是触发器是 IF,如果逻辑匹配(属性为真),setter 是 IF 中的代码 - 所以如果标签包含文本“测试标签 1:”然后增加按钮宽度为 3 列。我认为触发器具有它们没有的功能吗?这可以在 xaml 中实现吗?
【问题讨论】:
-
是的,就是这样。
-
您应该将条件逻辑放在 ViewModel 中,然后在针对按钮的样式中使用
DataTrigger以相应地更改其属性。无论如何,您必须使用按钮样式的Trigger,而不是标签样式的触发器。