【问题标题】:Modify Style (add a trigger) dynamically on runtime在运行时动态修改样式(添加触发器)
【发布时间】:2012-02-02 02:44:02
【问题描述】:

我想在运行时在我的 WPF 应用程序对象中添加一些图形项。我的目标是在我的按钮周围添加一个圆圈(仅通过运行时的代码隐藏)并向我的 ControlTemplate 添加一个触发器。

一切都很好,我的按钮周围的圆圈出现了但我的问题是:我无法创建任何触发器,它说:

After a 'TriggerCollection' is in use (sealed), it cannot be modified.

我的理解是,当样式被其他东西渲染或使用时,我无法修改它。 我尝试复制样式以修改新样式,但无法访问触发器。

我的对象是这样的:

<Style x:Key="Button_1" TargetType="{x:Type MyDLL:MyObject}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type MyDLL:MyObject}">
                <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="190" Height="140">
                    ....
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="Property1" Value="True">
                        <Setter.../>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

如果我将我的样式复制到新样式,如何将触发器添加到 ControlTemplate 中?

如果我将我的 ControlTemplate 复制到一个新的 ControlTemplate,新的 ControlTemplate 也会被密封。

我创建触发器的代码是:

Trigger trigger = new Trigger { Property = DragModeProperty, Value = false };
Setter setter = new Setter { Property = VisibilityProperty, Value = Visibility.Collapsed, TargetName = "DRAG" };
trigger.Setters.Add(setter);
Template.Triggers.Add(trigger); // THIS ONE CAUSE THE ERROR

【问题讨论】:

  • 任何评论都会很有用...谢谢

标签: c# wpf triggers runtime code-behind


【解决方案1】:

找到了。 我只是在一个新容器(网格)上而不是在我的按钮上创建我的触发器。 很简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2013-11-17
    • 2023-01-16
    • 2014-07-07
    相关资源
    最近更新 更多