2012-03-06 33 views
0

我有一個WPF文本框的樣式,它看起來像這樣的東西。該模板有一個按鈕,其按鈕點擊事件我需要將文本設置爲空。有人可以告訴我缺少什麼。或者我怎麼能叫的方法定製內部SearchTextBox說(OnButtonClikced)自定義的方法從WPF文本框中的樣式提高按鈕單擊事件

<Style TargetType="{x:Type DevExGrdDemo:SearchTextBox}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type DevExGrdDemo:SearchTextBox}"> 
        <Border x:Name="Border" 
          Background="{TemplateBinding Background}" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}"> 
         <Grid x:Name="LayoutGrid"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="*" /> 
           <ColumnDefinition Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ActualHeight}" /> 
          </Grid.ColumnDefinitions> 
          <ScrollViewer x:Name="PART_ContentHost" 
              Grid.Column="0" 
              Margin="2" /> 
          <Label x:Name="LabelText" 
            Grid.Column="0" 
            Margin="2" 
            Content="Search" 
            FontStyle="Italic" 
            Padding="2,0,0,0" /> 
          <Button x:Name="SearchBoxButton" 
            Grid.Column="1"                    
            Style="{DynamicResource SearchButton}" > 
           <i:Interaction.Triggers> 
            <i:EventTrigger EventName="Click" > 
             <"A method residing in the SearchTextBox called on button click"> 
            </i:EventTrigger> 
           </i:Interaction.Triggers> 
          </Button> 
         </Grid> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="HasText" Value="True"> 
          <Setter TargetName="LabelText" Property="Visibility" Value="Hidden" /> 
          <Setter TargetName="SearchBoxButton" Property="Style" Value="{StaticResource CancelSearchButton}" /> 
         </Trigger> 
         <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
          <Setter TargetName="LabelText" Property="Visibility" Value="Hidden" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

回答

4

風格上(而不是在控件模板)

http://msdn.microsoft.com/en-us/library/system.windows.eventtrigger.aspx

使用事件觸發你不能把制定者在一個EventTrigger :(

但是,您可以用故事板:)

<Style> 
    <Style.Triggers> 
    <EventTrigger RoutedEvent="Button.Click"> 
     <BeginStoryboard> 
     <Storyboard> 
      <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Text"> 
      <DiscreteObjectKeyFrame Value="" /> 
      </ObjectAnimationUsingKeyFrames> 
     </Storyboard> 
     </BeginStoryboard>   
    </EventTrigger> 
    </Style.Triggers> 
</Style> 
+0

@ jesperll文本屬性不能動畫 – punker76 2012-03-06 08:28:15

+0

不知道。 http://stackoverflow.com/questions/2603683/why-isnt-textbox-text-in-wpf-animatable – 2012-03-06 09:16:31

2

您可以使用附加屬性

public static class TextBoxBehaviour 
{ 
    public static bool GetClearAll(TextBox target) 
    { 
     return (bool)target.GetValue(ClearAllAttachedProperty); 
    } 

    public static void SetClearAll(TextBox target, bool value) 
    { 
     target.SetValue(ClearAllAttachedProperty, value); 
    } 

    public static readonly DependencyProperty ClearAllAttachedProperty = 
     DependencyProperty.RegisterAttached("ClearAll", typeof(bool), typeof(TextBoxBehaviour), new UIPropertyMetadata(false, OnClearAllAttachedPropertyChanged)); 

    static void OnClearAllAttachedPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) 
    { 
     ((TextBox)o).Clear(); 
    } 
} 

使用

<ControlTemplate.Triggers> 

    <Trigger SourceName="SearchBoxButton" 
      Property="IsPressed" 
      Value="True"> 
    <Setter Property="WpfStackOverflowSpielWiese:TextBoxBehaviour.ClearAll" 
      Value="True" /> 
    </Trigger> 

</ControlTemplate.Triggers> 
相關問題