.net - 触发器集合成员的类型必须为EventTrigger

标签 .net wpf datatrigger

我创建了一个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放置在StyleControlTemplateDataTemplate内,而我们正尝试将其直接放置在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/

相关文章:

wpf - 你能清除触发器中的依赖属性吗?

c# - 在读取内容之前从套接字接收全部数据

c# - 在 xaml 中将 DockLayoutManager 与 View 模型文件绑定(bind)

wpf - DataGrid.RowStyle 仅适用于初始绑定(bind)

wpf - 无论新值如何,当属性更改时触发数据触发器

wpf - 来自 MVVM 的服务调用

.net - Linq-to-Sql中的顺序GUID?

.net - 图形 GDI+ 上的多线程

.net - 使用 .Net 3.5 程序集 SQL 2005 CLR?

c# - 使用 GridSplitter 调整网格大小