2013-08-02 47 views
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> 
+0

公共静态只读的DependencyProperty SelectedProperty = DependencyProperty.Register(“Selected”,typeof(bool),typeof(XliffElement),new PropertyMetadata(default(bool))); public bool已选择 { get {return(bool)GetValue(SelectedProperty); } set {SetValue(SelectedProperty,value); } } – John

回答

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()方法

0

在你StoryboardOnMouseLeftButtonDown在您可以添加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)" 
+0

好吧,在我的情况下,“YouTarget”会是什么? – John

+0

@约翰:你为什么设置你的财产来源? –

+0

当他们点击控件上的任何地方时,我就想让它发生。 – John

相关问题