2010-10-18 24 views
5

Có cơ hội nào tôi có thể đặt cửa sổ bật lên bên cạnh một mục từ ListBox không? Tôi sử dụng MVVM, danh sách được ràng buộc với các phần tử và đối với một số yếu tố được chọn, tôi muốn hiển thị cửa sổ bật lên bên cạnh mục đó.Vị trí bật lên Wpf

Tôi có danh sách các yếu tố và tôi muốn hiển thị cửa sổ bật lên khi tôi nhấp vào phần tử danh sách được chỉ định, nhưng cửa sổ bật lên sẽ được hiển thị bên cạnh mục danh sách đã chọn.

tôi đã cố gắng một cái gì đó như thế này (nó không hoạt động):

<Popup IsOpen="{Binding Path=ShowPopup}" PlacementTarget="{Binding ElementName=List1, Path=SelectedItem}" Placement="Center"> 
     <TextBox Background="Red" Height="120" Text="Aaaaaa FUUUUUUUUUUUUU....."></TextBox> 
    </Popup> 

Tôi không muốn sử dụng mã phía sau, chỉ XAML

Trả lời

1

Vì bạn muốn hiển thị popup khi mục được nhấp, sẽ làm việc này cho bạn:

<Popup IsOpen="{Binding Path=ShowPopup}" Placement="Mouse"> 
    <TextBox Background="Red" Height="120" Text="Aaaaaa FUUUUUUUUUUUUU....."></TextBox> 
</Popup> 
2

lý do ví dụ của bạn không hoạt động chỉ đơn giản là vì bạn đang ràng buộc mục tiêu vị trí cho một đối tượng phi ui.

PlacementTarget="{Binding ElementName=List1, Path=SelectedItem}" 

SelectedItem trong trường hợp này có thể là một mô hình mô hình/quan điểm cho rằng đại diện cho một mục trong danh sách của bạn, do không phải là một cách sử dụng chính xác của các tài sản PlacementTarget.

Điều bạn cần là đặt Mục tiêu vị trí thành ItemContainer (Dr. WPF explains) và điều này là không thể nếu không có sự trợ giúp của mã "một số".

Bây giờ bạn đã biết sự cố, có một số cách để làm cho mã của bạn hoạt động, vì vậy tôi sẽ để nó hoạt động cho bạn.

6

này sẽ đặt một Popup ở bên phải của Ví dụ

<Window.Resources> 
    <SolidColorBrush x:Key="SelectedBackgroundBrush" Color="#DDD" /> 
    <SolidColorBrush x:Key="DisabledForegroundBrush" Color="#888" /> 

    <ControlTemplate x:Key="PopupListBoxItemTemplate" TargetType="ListBoxItem"> 
     <Border Name="Border" Padding="2" SnapsToDevicePixels="true"> 
      <Grid> 
       <Popup Name="c_popup" PlacementTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}" Placement="Right" > 
        <Border BorderBrush="Black" BorderThickness="1" CornerRadius="2.5"> 
         <TextBlock Background="Wheat" Foreground="Black" Text="Aaaaaa FUUUUUUUUUUUUU....."/> 
        </Border> 
       </Popup> 
       <ContentPresenter /> 
      </Grid> 
     </Border> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsSelected" Value="true"> 
       <Setter TargetName="Border" Property="Background" Value="{StaticResource SelectedBackgroundBrush}"/> 
       <Setter TargetName="c_popup" Property="IsOpen" Value="True"/> 
      </Trigger> 
      <Trigger Property="IsEnabled" Value="false"> 
       <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/> 
      </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 
</Window.Resources> 
<Grid> 
    <ListBox Name="listBox" 
      ItemsSource="{Binding Source={x:Static Fonts.SystemFontFamilies}}"> 
     <ListBox.ItemContainerStyle> 
      <Style TargetType="{x:Type ListBoxItem}"> 
       <Setter Property="Template" Value="{StaticResource PopupListBoxItemTemplate}" /> 
      </Style> 
     </ListBox.ItemContainerStyle> 
    </ListBox> 
</Grid> 
+1

Giải pháp tuyệt vời chọn ListBoxItem

alt text

nhưng tôi tìm thấy một lỗi nhỏ. Để làm việc này, tôi phải thay đổi Setter từ {StaticResource ListBoxItemTemplate} thành StaticResource PopupListBoxItemTemplate}. – Caustix

Các vấn đề liên quan