触发后WPF控件不会返回先前的状态

时间:2018-06-14 14:27:11

标签: c# wpf xaml data-binding

XAML

select 
 c.CustomerId, 
 c.CustomerName, 
 c.BillToCustomerId, 
 b.CustomerName as "Bill To This Company"
from Customer c
left join Customer b on (b.CustomerId = c.BillToCustomerId)

注意

<utility:InvalidNotification x:Name="InvalidNotificationControl"/> <Button Content="Clean AppV Cache" Click="Button_Click"> <Button.Style> <Style TargetType="Button"> <Setter Property="IsEnabled" Value="True"/> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=InvalidNotificationControl, Path=Visibility}" Value="Visible"> <Setter Property="IsEnabled" Value="False"/> </DataTrigger> </Style.Triggers> </Style> </Button.Style> </Button> 是自定义UserControl

现在,InvalidNotification最初工作正常并禁用按钮,因为Usercontrol可见。

问题是当我根据另一个条件折叠Usercontrol时按钮保持禁用状态。我发现这个相关的answer表明当触发条件不再满足时,触发器更改的属性会自动重置为之前的值。这不是我的情况。那是为什么?

修改

感谢@ mm8让我找到了解决方案。因此,如果您尝试将控件绑定到UserControl的内容(我的情况下为内部DataTrigger),只需在您的底部添加第二个触发器像这样的用户控件,

TextBlock

其中<UserControl.Style> <Style TargetType="UserControl"> <Setter Property="Visibility" Value="Collapsed"/> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=Notification, Path=Visibility}" Value="Visible"> <Setter Property="Visibility" Value="Visible"/> </DataTrigger> </Style.Triggers> </Style> </UserControl.Style> 是我notification

的名称

1 个答案:

答案 0 :(得分:1)

如果你切换/设置Visibility控件本身的InvalidNotification属性,那么你的示例是可行的,因为它是你绑定的属性。

如果在Visibility控件中设置某个元素的InvalidNotification属性,则需要绑定到此特定元素。

您无法使用ElementName绑定执行此操作,因为ButtonInvalidNotification控件中定义的任何元素都不属于同一个名称范围。