我创建了一个UserControl,类似于以下内容:
<UserControl>
<StackPanel Orientation="Vertical">
<StackPanel x:Name="Launch" Orientation="Horizontal" Visibility="Collapsed">
<!-- Children here -->
</StackPanel>
<ToggleButton x:Name="ToggleLaunch" IsChecked="False" Content="Launch" />
</StackPanel>
</UserControl>
我一直在尝试使用DataTrigger来使“启动” StackPanel在选中ToggleButton时可见,否则将保持折叠状态。但是,在运行时,我收到一条错误消息,指出“对象初始化失败(ISupportInitialize.EndInit)。触发器集合成员的类型必须为EventTrigger”。我尝试将其添加到UserControl和StackPanel的触发器集合中,但没有成功。我的触发器XAML如下所示:
<DataTrigger Binding="{Binding ElementName=ToggleLaunch, Path=IsChecked}" Value="True">
<Setter TargetName="Launch" Property="UIElement.Visibility" Value="Visible" />
</DataTrigger>
最佳答案
理查德·麦奎尔(Richard C.
DataTriggers can be used with XML tags Style, ControlTemplate and DataTemplate
例如,如果您尝试将触发器添加到
TextBlock
,它将生成此错误:Error: Triggers collection members must be of type EventTrigger
为什么?只能将
Trigger
放置在Style
,ControlTemplate
或DataTemplate
内,而我们正尝试将其直接放置在TextBlock
内。在这种情况下,修复很容易:只需将触发器包装为样式,然后将此样式放入
TextBlock
中,错误就会消失。这是修复之前发生错误的XAML:
<TextBlock x:Name="Hello" Text="{Binding Hello, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<TextBlock.Triggers>
<DataTrigger Binding="{Binding Hello}" Value="GoGreen">
<Setter Property="Foreground" Value="Green" />
</DataTrigger>
</TextBlock.Triggers>
</TextBlock>
这是修复后的XAML:
<TextBlock x:Name="Hello" Text="{Binding Hello, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Red" />
<Style.Triggers>
<DataTrigger Binding="{Binding Hello}" Value="GoGreen">
<Setter Property="Foreground" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
这是一个示例屏幕截图,显示了如果我们输入
GoGreen
,文本将变为绿色:...,如果我们输入其他内容,则文本默认为红色:
Web上有很多关于WPF触发器的免费资料,并且所有这些资料都在解释概念和MSDN Docs方面做得相当好。
关于.net - 触发器集合成员的类型必须为EventTrigger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/836703/