WPF自定義行為Behavior,實現雙擊控件復制文本


WPF引用xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"后可以設置很多自定義的行為:

           <i:Interaction.Triggers>
                <i:EventTrigger EventName="ValueChanged">
                    <i:InvokeCommandAction Command="{Binding ValueChangedCommand}" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
<UserControl.Resources>
        <ControlTemplate x:Key="trackThumb" TargetType="{x:Type Slider}">
            <Border Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">
                <Grid>
                    <Track x:Name="PART_Track">
                        <Track.Thumb>
                            <Thumb Width="10">
                                <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="DragCompleted">
                                        <i:InvokeCommandAction Command="{Binding ValueChangedCommand}" />
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>
                            </Thumb>
                        </Track.Thumb>
                    </Track>
                </Grid>
            </Border>
        </ControlTemplate>
    </UserControl.Resources>

當時當我們有一些自定義的需求時,需要自定義行為,例如給每個控件添加一個雙擊復制文本的行為。

1. 定義行為

public class MouseDoubleClickCopyTextBehavior : Behavior<FrameworkElement>
    {
        /// <summary>
        /// 需要復制的內容
        /// </summary>
        public string CopyText
        {
            get { return (string)GetValue(CopyTextProperty); }
            set { SetValue(CopyTextProperty, value); }
        }


        public static readonly DependencyProperty CopyTextProperty = DependencyProperty.Register("CopyText", typeof(string), typeof(MouseDoubleClickCopyTextBehavior), new PropertyMetadata(null));


        protected override void OnAttached()
        {
            base.OnAttached();
            AssociatedObject.PreviewMouseLeftButtonDown += AssociatedObject_PreviewMouseLeftButtonDown;
        }

        protected override void OnDetaching()
        {
            base.OnDetaching();
            AssociatedObject.PreviewMouseLeftButtonDown -= AssociatedObject_PreviewMouseLeftButtonDown;
        }

        void AssociatedObject_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (e.ClickCount >= 2)
                Clipboard.SetDataObject(CopyText);
        }

 

2. 控件綁定行為

<Style TargetType="Label" BasedOn="{StaticResource {x:Type Label}}">
                <Setter Property="VerticalAlignment" Value="Center" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Label">
                            <Border>
                                <ContentPresenter Name="ContentPresenter" 
                                                 HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                                  RecognizesAccessKey="True" >
                                    <!-- 綁定自定義行為 -->
                                    <i:Interaction.Behaviors>
<hei:MouseDoubleClickCopyTextBehavior CopyText="{Binding ElementName=ContentPresenter,Path=Content}"/> </i:Interaction.Behaviors> </ContentPresenter> </Border> <ControlTemplate.Triggers> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Foreground"><Setter.Value> <SolidColorBrush Color="{DynamicResource DisabledForegroundColor}" /> </Setter.Value> </Setter> </Trigger> </ControlTemplate.Triggers> </ControlTemplate></Setter.Value> </Setter> </Style>

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM