2010-10-28 27 views
8

Tôi có một WPF Popup đơn giản mà tôi đang hiển thị khi người dùng nhấp vào nút.Tại sao Popup của tôi hiển thị đối diện thuộc tính Vị trí trên một số máy?

<Button 
    x:Name="aButton" 
    Content="Up/Down" 
    Width="75" 
    Height="30" 
    Click="aButton_Click" 
/> 
<Popup 
    PlacementTarget="{Binding ElementName=aButton}" 
    Placement="Right" 
    VerticalOffset="-31" 
    StaysOpen="False" 
    AllowsTransparency="True" 
> 
    <StackPanel> 
     <Button Width="45" Height="45" Margin="2,0,2,2" Content="+"/> 
     <Button Width="45" Height="45" Margin="2,0,2,0" Content="-"/> 
    </StackPanel> 
</Popup> 

Điều cực kỳ lạ ... là mã này hoạt động khác nhau tùy thuộc vào máy chạy trên máy nào.

Tôi chạy mã này trên máy tính để bàn chính của mình và mọi thứ hoạt động tốt ... và như thường lệ. Tôi chạy nó trên netbook PDC09 của tôi ... và Popup hiển thị ngược lại (ở bên trái thay vì bên phải như tôi đã nói với nó với thuộc tính Vị trí).

Tại sao điều này? Và tôi có thể làm gì với nó?

Trả lời

11

Tôi không thể tìm thấy bất kỳ thứ gì qua Google ... nhưng tìm kiếm may mắn trong số WPF forum, nhanh chóng tìm thấy số này post. Lưu ý: đừng quên tìm kiếm các diễn đàn WPF nếu Google không thể tìm thấy bất cứ điều gì.

Câu trả lời là netbook PDC09 của tôi là máy tính bảng ở tim, và rõ ràng, Microsoft cho rằng đó là ý tưởng tốt để hiển thị cửa sổ bật lên đối diện thuộc tính Vị trí trên máy tính bảng được định cấu hình cho người thuận tay phải ... như vậy Popup không xuất hiện dưới bàn tay của người dùng.

Giải pháp là hoàn nguyên về vị trí Popup tùy chỉnh ... nếu bạn không muốn hành vi này.

Tôi rất muốn nghe về bất kỳ cách nào khác xung quanh vấn đề này.

+1

Tìm thấy tuyệt vời, cảm ơn bạn! – cunningdave

+0

Và btw, tôi luôn tìm kiếm SO để tìm những gì người khác đã tìm thấy trên các diễn đàn thích hợp. ;) – cunningdave

+1

Vui mừng được giúp bạn ... những thứ như thế này, khiến tôi phát điên. – cplotts

0

Tôi đã khắc phục sự cố này bằng cách thêm đường viền trong cùng một cột màu/hàng làm mục tiêu vị trí mong muốn. Sau đó, hãy đặt mục tiêu này làm mục tiêu vị trí thay thế. Bằng cách liên kết chiều rộng của đường viền này với nội dung bật lên, nó sẽ tự động điều chỉnh chiều rộng của nó do đó căn chỉnh (trái hoặc phải) không liên quan. Nếu bạn vẫn muốn điều chỉnh căn chỉnh, bạn có thể thực hiện điều đó bằng cách căn chỉnh đường viền đích của vị trí. Hy vọng rằng có ý nghĩa, nếu không, đây là một ví dụ nhanh.

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <Popup x:Name="StartMenuPopup" Placement="Top" PlacementTarget="{Binding ElementName=PopupTarget}" > 
     <Border x:Name="PopupBorder"> 
     </Border> 
    </Popup> 

    <Border x:Name="PopupTarget" Grid.Row="1" Width="{Binding ActualWidth, Mode=OneWay, ElementName=PopupBorder}" 
     BorderThickness="0" HorizontalAlignment="Left" VerticalAlignment="Top"/> 

    <startmenu:TaskBar Grid.Row="1"> 
     <startmenu:TaskBar.StartButton> 
      <startmenu:ToggleMenu Width="36" x:Name="StartButton" 
           ImageData="{Binding StartButtonImageData}" 
           AssociatedPopup="{Binding ElementName=StartMenuPopup}" 
           IsOpen="{Binding StartMenuOpen, Mode=TwoWay}"/> 
     </startmenu:TaskBar.StartButton> 
    </startmenu:TaskBar> 
</Grid> 

Cửa sổ bật lên Nhắm mục tiêu theo vị trí liên kết với phần tử PopupBorder. Điều này làm cho đường viền PopupTarget có cùng độ rộng với cửa sổ bật lên do đó phủ nhận vấn đề căn chỉnh.

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