0

我正在使用以下样式集创建自定义 wpf 控件。在后面的代码中,我有一个名为 selected 的依赖属性。操作 OnMouseLeftButtonDown 触发器时,如何将此属性设置为 true?

<Style TargetType="{x:Type local:myControl}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:myControl}">
                    <ControlTemplate.Resources>
                        <Storyboard x:Key="OnMouseLeftButtonDown">
                            <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="border">
                                <EasingColorKeyFrame KeyTime="0" Value="#FF9B1111"/>
                            </ColorAnimationUsingKeyFrames>
                        </Storyboard>
                    </ControlTemplate.Resources>
                    <ControlTemplate.Triggers>
                        <EventTrigger RoutedEvent="UIElement.MouseLeftButtonDown" SourceName="textBlock">
                            <BeginStoryboard Storyboard="{StaticResource OnMouseLeftButtonDown}"/>
                        </EventTrigger>
                        <EventTrigger RoutedEvent="UIElement.MouseLeftButtonDown" SourceName="textBlock2">
                            <BeginStoryboard Storyboard="{StaticResource OnMouseLeftButtonDown}"/>
                        </EventTrigger>
                    </ControlTemplate.Triggers>
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <Border Name="border" BorderBrush="#FFDEDEDE" BorderThickness="1" Margin="1" >
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Name="textBlock" HorizontalAlignment="Left" Margin="2,1,2,3" Text="{TemplateBinding ElementName}" TextWrapping="Wrap" VerticalAlignment="Top" Foreground="#FF7C8CF1"  FontSize="10" FontWeight="Bold"></TextBlock>
                                <TextBlock Name="textBlock2" HorizontalAlignment="Left" Margin="2,1,2,3" Text="{TemplateBinding ElementText}" TextWrapping="Wrap" VerticalAlignment="Top" Foreground="#FF75757A" FontSize="10" FontWeight="Bold"></TextBlock>
                            </StackPanel>
                        </Border>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
4

2 回答 2

0

我最终以另一种方式做到了这一点。我将控件的名称更改为 PART_ElementName 和 PART_ElementText 我在 OnApplyTemplate() 方法中执行了以下操作

        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
            _elementName = Template.FindName("PART_ElementName", this) as TextBlock;
            _elementText = Template.FindName("PART_ElementText", this) as TextBlock;

            if (_elementName != null) _elementName.MouseLeftButtonDown += (sender, args) => SelectControl();
            if (_elementText != null) _elementText.MouseLeftButtonDown += (sender, args) => SelectControl();
        }

然后我在 SelectControl() 方法中进行更改

于 2013-08-06T11:33:48.917 回答
0

在您的Storyboard OnMouseLeftButtonDown中,您可以添加ObjectAnimationUsingKeyFrames. 样本:

<Storyboard x:Key="OnMouseLeftButtonDown">
    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="border">
        <EasingColorKeyFrame KeyTime="0" Value="#FF9B1111"/>
    </ColorAnimationUsingKeyFrames>

    <!-- xmlns:sys="clr-namespace:System;assembly=mscorlib" -->
    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="YouTarget" Storyboard.TargetProperty="NameOfYourProperty">
        <DiscreteObjectKeyFrame KeyTime="0:0:0">
            <DiscreteObjectKeyFrame.Value>
                <sys:Boolean>True</sys:Boolean>
            </DiscreteObjectKeyFrame.Value>
        </DiscreteObjectKeyFrame>
    </ObjectAnimationUsingKeyFrames>
</Storyboard>

对于附加的依赖属性必须这样写:

Storyboard.TargetProperty="(local:YourDependecyClass.IsSampleMyProperty)"
于 2013-08-02T12:23:42.657 回答