В вопросе 1 вы можете использовать триггеры для выбора поведения расширения на основе ExpandDirection
.удалите Grid.Width
и Grid.Height
из Grid
, а затем добавьте это в триггеры вашего шаблона:
<Trigger Property="ExpandDirection" Value="Down">
<Setter TargetName="ExpandSiteContainer" Property="Height">
<Setter.Value>
<MultiBinding Converter="{StaticResource multiplyConverter}">
<Binding Path="ActualHeight" ElementName="ExpandSite"/>
<Binding Path="Tag" RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="ExpandDirection" Value="Right">
<Setter TargetName="ExpandSiteContainer" Property="Width">
<Setter.Value>
<MultiBinding Converter="{StaticResource multiplyConverter}">
<Binding Path="ActualWidth" ElementName="ExpandSite"/>
<Binding Path="Tag" RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</Setter.Value>
</Setter>
</Trigger>
Для вопроса 2, я думаю, ответ может быть: нет.Проблема в том, что WPF в конечном итоге попытается заморозить анимацию, потому что она является частью Style
, и это затрудняет выполнение всего, что изменяет продолжительность.(Например, если вы попытаетесь связать данные с анимацией Duration
, вы получите ошибку во время инициализации, потому что WPF пытается заморозить Storyboard
, что быстро выдает исключение, чтобы сказать, что оно не может быть заморожено.)Я понимаю, что причина, по которой стили замораживают свои ресурсы, заключается в том, что это позволяет более эффективно распределять ресурсы между несколькими экземплярами стиля.Как сказано в http://msdn.microsoft.com/library/ms742868
Нельзя использовать динамические ссылки на ресурсы или выражения привязки данных для установки значений свойств раскадровки или анимации.Это потому, что все внутри стиля должно быть поточно-ориентированным, а система синхронизации должна заморозить объекты Storyboard, чтобы сделать их поточно-ориентированными.Storyboard не может быть заморожен, если он или его дочерние временные шкалы содержат ссылки на динамические ресурсы или выражения привязки данных.
Я не совсем уверен, почему «все внутри стиля должно быть поточно-ориентированным».Я вижу, что это будет необходимо для стилей, которые используются в нескольких потоках (например, стили по умолчанию для элементов управления).Возможно, они просто обеспечивают соблюдение всех стилей для согласованности.Но в любом случае, похоже, что анимации внутри стилей не содержат динамических значений любого вида, что говорит о том, что вы не сможете выполнить 2-е действие, о котором вы просите.