如何创建在绑定更改值之前触发的触发器?如何对数据模板执行此操作?
<ContentControl Content="{Binding Path=ActiveView}" Margin="0,95,0,0">
<ContentControl.Triggers>
<--some triger to fire, when ActiveView is changing or has changed ?!?!? -->
</ContentControl.Triggers>
public Object ActiveView
{
get { return m_ActiveView; }
set {
if (PropertyChanging != null)
PropertyChanging(this, new PropertyChangingEventArgs("ActiveView"));
m_ActiveView = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("ActiveView"));
}
}
如何为 DataTemplate 执行此操作?
<DataTemplate DataType="{x:Type us:LOLClass1}">
<ContentControl>
<ContentControl.RenderTransform>
<ScaleTransform x:Name="shrinker" CenterX="0.0" CenterY="0.0" ScaleX="1.0" ScaleY="1.0"/>
</ContentControl.RenderTransform>
<us:UserControl1/>
</ContentControl>
<DataTemplate.Triggers>
<-- SOME TRIGER BEFORE CONTENT CHANGES-->
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="shrinker" Storyboard.TargetProperty="ScaleX" From="1.0" To="0.8" Duration="0:0:0.3"/>
<DoubleAnimation Storyboard.TargetName="shrinker" Storyboard.TargetProperty="ScaleY" From="1.0" To="0.8" Duration="0:0:0.3"/>
</Storyboard>
</BeginStoryboard>
</-- SOME TRIGER BEFORE CONTENT CHANGES-->
</DataTemplate.Triggers>
</DataTemplate>
如何在绑定更改之前收到通知? (我想捕获变化的视觉组件位图并创建滑动视图动画)
- - - - - 解决方案 - - - - - -
我创建了从 ContentControl 派生的自定义控件并覆盖了 ContentProperty ValueChanged 回调
public class SmartContentControl : ContentControl
{
public static readonly RoutedEvent ContentChangingEvent = EventManager.RegisterRoutedEvent("ContentChanging", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(SmartContentControl));
public event RoutedEventHandler ContentChanging
{
add { AddHandler(ContentChangingEvent, value); }
remove { RemoveHandler(ContentChangingEvent, value); }
}
public SmartContentControl()
{
ContentProperty.OverrideMetadata(typeof(SmartContentControl), new FrameworkPropertyMetadata(new PropertyChangedCallback(ContentPropertyChangedCallback)));
}
private static void ContentPropertyChangedCallback(DependencyObject _object, DependencyPropertyChangedEventArgs _eventArgs)
{
SmartContentControl control = (SmartContentControl)_object;
RoutedEventArgs newEventArgs = new RoutedEventArgs(SmartContentControl.ContentChangingEvent);
control.RaiseEvent(newEventArgs);
}
}