2015-04-26 3 views
3

У меня есть настраиваемый элемент управления, который наследуется от текстового поля, в .cs у меня есть DependencyProperty SelectedItems (эти элементы будут отображаться внутри texbox, если они есть), если texbox не выглядит как обычный texbox.wpf customcontrol, как связать кнопку click внутри itemscontrol DataTemplate

В Generic.xaml в шаблоне я добавил новую границу и внутри я поставил ItemsControl с шаблоном элемента, как этот

XAML itemControl части:

<Border BorderBrush="Green" BorderThickness="1"> 
         <ItemsControl x:Name="PART_SelectedItemsHost" 
           ItemsSource="{TemplateBinding SelectedItems}" 
           ItemTemplate="{TemplateBinding SelectedItemsTemplate}" 
           VerticalAlignment="Stretch" 
           HorizontalAlignment="Stretch"                  
           Margin="{TemplateBinding Padding}" 
           Visibility="Visible"> 
          <ItemsControl.ItemsPanel> 
           <ItemsPanelTemplate> 
            <WrapPanel IsItemsHost="True"> 
            </WrapPanel> 
           </ItemsPanelTemplate> 
          </ItemsControl.ItemsPanel>        
         </ItemsControl>        
        </Border> 

Xaml ItemTemplate часть:

<DataTemplate x:Key="DefaultSelectedItemsTemplate" > 
    <Border x:Name="selectedItemBorder" BorderBrush="Gray" BorderThickness="1" CornerRadius="5" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" Margin="5,1,1,1"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="15"/> 
      </Grid.ColumnDefinitions> 
      <TextBlock Grid.Column="0" Text="{Binding}" Margin="5,0,3,0"></TextBlock> 
      <Button BorderThickness="0" Grid.Column="1" Click="???" or Command="???" >X</Button> 
     </Grid> 
    </Border> 
</DataTemplate> 

Теперь, как я могу связать эту кнопку «X» в моем файле .cs. Я пытаюсь сделать это переопределением метода OnApplyTemplate() ... и мне удалось связать mousedown, когда я нажимаю на элемент texbox, но я не знаю, как прикрепить этот щелчок на кнопке

моего .cs часть

  public override void OnApplyTemplate() 
    { 
     base.OnApplyTemplate(); 
     ItemsControl itmControl = GetTemplateChild("PART_SelectedItemsHost") as ItemsControl; 

     if (itmControl != null) 
     { 
      itmControl.MouseLeftButtonDown += new MouseButtonEventHandler(itmControl_MouseLeftButtonDown); 

      // blind click on X buttons in ItemsControl 
     } 

    } 

    private void itmControl_MouseLeftButtonDown(object obj, MouseButtonEventArgs e) 
    { 
     //IsMouseLeftButtonDown = true; 
     System.Diagnostics.Debug.WriteLine(e.OriginalSource.ToString()); 
     object item = (e.OriginalSource as FrameworkElement).DataContext; 
     deleteSelectedItem(item); 

    } 

и вот картина, как этот элемент управление выглядит как муравей, что кнопка X необходимо удалить элемент из коллекции SelectedItem.

picture

+1

Этот вопрос повторяется и ответил здесь http://stackoverflow.com/questions/ 29872080/wpf-customcontrol-binding-itemscontrol-datatemplate-button/29874527 # 29874527 Если вам нужна дополнительная информация, разделите свои вопросы о вещах, которые вы не знаете –

+0

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

ответ

1

ItemsControl имеет следующее название:

<ItemsControl x:Name="PART_SelectedItemsHost" 

Таким образом, в шаблоне

<Button BorderThickness="0" Grid.Column="1" Command="{Binding DataContext.DeleteItem, ElementName=PART_SelectedItemsHost}" CommandParameter="{Binding}">X</Button> 
Смежные вопросы