2012-03-07 1 views
1

Я реализовал кнопку в текстовое поле переопределения шаблона следующего кода:Давать кнопку в функциональности текстового поля, не используя пользовательский элемент управления, но overiding текстового полю шаблона

<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBoxBase}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TextBoxBase}"> 

       <Border Name="Border" 
        CornerRadius="2" 
        Padding="2" 
        Background="{StaticResource WindowBackgroundBrush}" 
        BorderBrush="{StaticResource SolidBorderBrush}" 
        BorderThickness="1"> 

        <Grid x:Name="LayoutGrid"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*" /> 
          <ColumnDefinition Width="Auto" /> 
          <ColumnDefinition Width="Auto" /> 
         </Grid.ColumnDefinitions> 

         <ScrollViewer x:Name="PART_ContentHost" Grid.Column="0" /> 


         <Button x:Name="XButton" 
           Grid.Column="2" 
           Width="25" 
           Height="25" 
           Content="X" 
           Visibility="Visible" 
           BorderBrush="Transparent" 
           Command="{Binding ButtonClick}" /> 
        </Grid> 

       </Border> 

      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Кнопка должна удалить все содержимое в текстовом поле при попадании. Для этого я хотел бы использовать команду «Command =« {Binding ButtonClick} ""

Можно ли привязать работу без создания настраиваемого элемента управления и библиотеки? Или как может быть привязка или функциональность?

Я использую шаблон MVVM, есть ли способ, например, использовать ViewModel и создать свойство для привязки к этому?

ответ

1

Для привязок в стиле, как я использовать AttachedCommandBehaviors «ACB»

http://marlongrech.wordpress.com/2008/12/13/attachedcommandbehavior-v2-aka-acb/

Я использую его для обнаружения щелчков на элементах в стиле, который я хочу, чтобы обнаружить клики. Я не использовал его для кнопок, но я бы подумал, что он должен работать так же хорошо.

Я привязываюсь к предку стиля, который является типом User Control, который, возможно, потребуется изменить для вашего приложения.

Вам нужно добавить пространство имен xmlns: acb в свой xaml, а также просмотреть ссылку для получения более подробной информации.

<ControlTemplate TargetType="{x:Type ListViewItem}"> 
        <StackPanel x:Name="IconBorder" 
           acb:CommandBehavior.Event="PreviewMouseUp" 
           acb:CommandBehavior.Command="{Binding Path=DataContext.SelectedListItemSingleClickCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" 
           acb:CommandBehavior.CommandParameter="{Binding}"> 
         <DockPanel LastChildFill="False" HorizontalAlignment="Left" Width="{Binding Width, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}}"> 
          <TextBlock Text="{Binding Title}" 
             DockPanel.Dock="Left" 
             x:Name="ListItemText" /> 
          <Image x:Name="ActionIcon" 
            Source="{Binding Path=DataContext.SelectedListActionIcon, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" 
            DockPanel.Dock="Right" 
            acb:CommandBehavior.Event="PreviewMouseUp" 
            acb:CommandBehavior.Command="{Binding Path=DataContext.SelectedListActionIconClickCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" 
            acb:CommandBehavior.CommandParameter="{Binding}"> 
          </Image> 
         </DockPanel> 
         <ContentPresenter DockPanel.Dock="Left" /> 
        </StackPanel> 
</ControlTemplate> 

 Смежные вопросы

  • Нет связанных вопросов^_^