Проблемы WPF с синтаксисом триггера - PullRequest
0 голосов
/ 27 октября 2009

Я не могу заставить работать следующее. Цель состоит в том, чтобы изменить ZIndex пользовательского контроля когда мышь находится над ее содержимым.

Использование простого свойства, такого как "Background" вместо ZIndex, также не работает. Компилятор жалуется на то, что «Значение 'Grid.IsMouseOver' не может быть присвоено свойству 'Свойство'. Ссылка на объект не установлена ​​на экземпляр объекта." (После компиляции и запуска проекта).

Может ли кто-нибудь предоставить рабочий пример триггера, который изменяет некоторые свойства другого элемента управления?

<UserControl x:Class="ImageToolWPF.Controls.sample"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">

    <UserControl.Triggers>
        <Trigger SourceName="viewPort" Property="Grid.IsMouseOver" Value="True">
            <Setter TargetName="me" Property="UserControl.Panel.ZIndex" Value="2" />
        </Trigger>
    </UserControl.Triggers>

    <Border Name="border" CornerRadius="3,3,3,3" BorderThickness="3" BorderBrush="Green">
        <Grid Name="viewPort">
            <Label Name="labelTop" HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="16" Background="#a0ffffff" Padding="4"/>
        </Grid>
    </Border>
</UserControl>

1 Ответ

1 голос
/ 27 октября 2009

Здесь есть ряд проблем:

  • FrameworkElement.Triggers могут содержать только EventTriggers, но не общие триггеры. (См. Примечания в документации MSDN.) Вместо этого вам потребуется переместить триггер в стиль.
  • В вашем Сеттере вы указали TargetName "me", но, похоже, нет ни одного элемента с таким именем. Я думаю, вы имеете в виду, что сеттер влияет на сам UserControl. В этом случае, если вы переместите Trigger в стиль в UserControl, вы можете просто полностью опустить TargetName: сеттеры в стиле автоматически влияют на элемент стиля.
  • В своем Setter вы указали свойство UserControl.Panel. Это означает, что вы ожидаете, что у цели (то, что называется «я») будет свойство UserControl, а у свойства - Panel. Я думаю, что вы ищете "(Panel.ZIndex)" - обратите внимание на скобки, показывающие, что это имя присоединенного свойства, а не составной путь, и что нет префикса UserControl.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...