简体   繁体   English

如何在ItemsControl中显示弹出窗口

[英]How to show popup in ItemsControl

I want to show Popup when I click on Label ( LabelShift_MouseDown ). 当我单击LabelLabelShift_MouseDown )时,我想显示Popup I basically want to edit shift when click on label(one label one shift) but I want when I click label to show popup (edit popup with edit buttons). 我基本上想在单击标签时编辑班次(一个标签一个班次),但是我想要在单击标签以显示弹出窗口时(使用编辑按钮编辑弹出窗口)。 So can somebody tell me how to do it because this code doesn't work. 有人可以告诉我该怎么做,因为此代码不起作用。 Here is my code: 这是我的代码:

<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;
}

You need not to define the Popup inside the DataTemplate . 您无需在DataTemplate定义Popup Add it in Resources of your window or usercontrol like 将其添加到窗口的Resources或用户控件中,例如

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

And in the MouseDown handler just do: 在MouseDown处理程序中,只需执行以下操作:

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

Try p.IsOpen = true; 尝试p.IsOpen = true; instead of p.StaysOpen = true; 而不是p.StaysOpen = true; .

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM