2013-09-23 3 views
0

Я хочу показать Popup, когда я нажимаю на Label (LabelShift_MouseDown). Я в основном хочу изменить сдвиг, когда нажимаю на метку (одна метка на одну смену), но я хочу, когда я нажимаю метку, чтобы отображать всплывающее окно (редактировать всплывающее окно с кнопками редактирования). Так может кто-нибудь сказать мне, как это сделать, потому что этот код не работает. Вот мой код:Как показать всплывающее окно ItemsControl

<ItemsControl ItemsSource="{Binding Path=ScheduleItem}" Tag="{Binding .}" Margin="0,10,0,0"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
     <Canvas IsItemsHost="True" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemContainerStyle> 
     <Style TargetType="{x:Type ContentPresenter}"> 
     <Setter Property="Canvas.Left" Value="{Binding Path=Start, Converter={StaticResource timeToPositionConverter}}" /> 
     <Setter Property="Canvas.Top" Value="{Binding Path=Index}" /> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate DataType="TimeLineEntry"> 
     <Label Width="{Binding Duration}" Height="20" Tag="{Binding .}" BorderThickness="1" BorderBrush="DarkGray" MouseDown="LabelShift_MouseDown"> 
      <Label.Background> 
       <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
        <GradientStop Color="#FF3B4DFF" Offset="0.996" /> 
        <GradientStop Color="#FF6674F8" Offset="0" /> 
        <GradientStop Color="#FFC7CEFF" Offset="0.791" /> 
       </LinearGradientBrush> 
      </Label.Background> 
      <Popup> 
       <StackPanel> 
        <TextBox Text="Text" /> 
        <Button Content="Update" /> 
        <Button Content="Delete" Style="{StaticResource DeleteButton}"/> 
       </StackPanel> 
      </Popup> 
     </Label> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

private void LabelShift_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    Popup p = (sender as Label).Content as Popup; 
    p.StaysOpen = true; 
} 

ответ

2

Вам не нужно определить Popup внутри DataTemplate. Добавьте его в Resources вашего окна или UserControl как

 <Popup x:Key="myPopup"> 
      <StackPanel> 
       <TextBox Text="Text" /> 
       <Button Content="Update" /> 
       <Button Content="Delete" Style="{StaticResource DeleteButton}"/> 
      </StackPanel> 
     </Popup> 

И в обработчик MouseDown просто сделать:

 Popup popup = Resources["myPopup"] as Popup; 
     popup.PlacementTarget = sender as UIElement;; 
     popup.IsOpen = true 
+0

Я попробую это. Но можно ли поместить 'Popup' в' DataTempalte', поэтому каждая «Label» имеет свой собственный Popup – mcorluka

+1

, там есть способ поиска VisualTree элемента для его поиска ... но зачем вам это нужно. . Единственное всплывающее окно может служить цели. Если вы хотите, чтобы всплывающее окно отображало данные в соответствии с целевым объектом размещения, вы можете установить его DataContext в DataContext PlacementTarget, то есть отправителя в мыши вниз – Nitin

1

Попробуйте p.IsOpen = true; вместо p.StaysOpen = true;.

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