Изменить стиль (добавить триггер) динамически во время выполнения - PullRequest
2 голосов
/ 31 января 2012

Я хочу добавить некоторые графические элементы во время выполнения в моем объекте моего приложения WPF.Моя цель состоит в том, чтобы добавить круг вокруг моей кнопки (только с помощью codebehind во время выполнения) и добавить триггер к моей 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, новый также будет запечатан.

Мой код для создания моего триггера:

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

1 Ответ

0 голосов
/ 01 февраля 2012

Нашел это.Я просто создаю свой триггер в новом контейнере (Grid) вместо моего Button.Простой.

...