Установить триггер на панели док-станции - PullRequest
0 голосов
/ 07 июля 2011

У меня есть панель Dock, и я хочу установить ее высоту в зависимости от значения свойства.

Следующие компилируются, но не выполняются:

<DockPanel Grid.Row="1"
            Visibility="{Binding Path=IsValid}" Margin="8,4">
            <DockPanel.Triggers>
                <Trigger Property="FrameworkElement.Visibility" Value="Visible">
                    <Setter Property="FrameworkElement.Height" Value="150"/>
                </Trigger>
                <Trigger Property="FrameworkElement.Visibility" Value="Hidden">
                    <Setter Property="FrameworkElement.Height" Value="0"/>
                </Trigger>
            </DockPanel.Triggers>
            <ListBox Height="150"/>
        </DockPanel>

Что я делаю неправильно?Любая помощь, с благодарностью.

Спасибо

Джо

1 Ответ

2 голосов
/ 07 июля 2011

С MSDN :

Обратите внимание, что набор триггеров, установленных на элементе, поддерживает только EventTrigger, но не триггеры свойств (Trigger).Если вам требуются триггеры свойств, вы должны поместить их в стиль или шаблон, а затем назначить этот стиль или шаблон элементу либо напрямую через свойство Style, либо косвенно через неявную ссылку на стиль.

ТакДля того, чтобы это работало, вам нужен стиль или шаблон.Я не думаю, что вы хотите изменить внешний вид вашей DockPanel, так что стиль это:

<DockPanel Grid.Row="1" Visibility="{Binding Path=IsValid}" Margin="8,4">
    <DockPanel.Style>
       <Style>
           <Style.Triggers>
               <Trigger Property="FrameworkElement.Visibility" Value="Visible">
                   <Setter Property="FrameworkElement.Height" Value="150"/>
               </Trigger>
               <Trigger Property="FrameworkElement.Visibility" Value="Hidden">
                   <Setter Property="FrameworkElement.Height" Value="0"/>
               </Trigger>
           </Style.Triggers>
       </Style>
    </DockPanel.Style>

    <ListBox Height="150"/>
</DockPanel>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...