2009-08-13 23 views
7

Với ứng dụng WPF rất đơn giảnWPF ToolBar Separator co lại không có gì khi bên trong một StackPanel

<Window x:Class="Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="800"> 
    <Grid> 
     <ToolBar Height="50" > 
      <MenuItem Header="Test1" /> 
      <MenuItem Header="Test2" /> 

      <StackPanel Orientation="Horizontal"> 
       <Separator /> 
       <MenuItem Header="Test3" /> 
       <MenuItem Header="Test4" /> 
       <MenuItem Header="Test5" /> 
      </StackPanel> 
     </ToolBar> 
    </Grid> 
</Window> 

Yếu tố Separator co lại kết quả nào. Nếu tôi đặt Dấu phân cách ngay trước khi StackPanel bắt đầu, nó sẽ xuất hiện. Lý do tại sao điều này xảy ra? Có một thiết lập kiểu có thể được áp dụng ở đâu đó để tránh điều này không?

Trả lời

15

StackPanel đang thay đổi hướng của Separator bằng cách nào đó. Lưu ý rằng nếu bạn nói rõ ràng Separator là 20 đơn vị chiều rộng, Separator sẽ là một đường nằm ngang thay vì một đường thẳng đứng. Đó là một phần của những gì đang xảy ra.

Nếu bạn áp dụng LayoutTransform cho Separator, nó sẽ hoàn tác bất cứ điều gì mà StackPanel đang thực hiện.

<Separator> 
    <Separator.LayoutTransform> 
     <RotateTransform 
      Angle="90" /> 
    </Separator.LayoutTransform> 
</Separator> 

Mặc dù vậy, tôi không hiểu nhu cầu về số StackPanel.

+0

tôi đang ràng buộc khả năng hiển thị của stackpanel để vô hiệu hóa các nhóm chức năng – kenwarner

+0

Cảm ơn ... đã làm các trick cho tôi. – el2iot2

+0

Thực ra StackPanel KHÔNG thay đổi hướng của dấu phân cách; dấu phân cách mặc định theo chiều ngang. Đó là thanh công cụ thay đổi hướng dọc cho bạn; nhưng bạn không nhận được lợi ích này nếu dấu tách không phải là con trực tiếp của thanh công cụ. Xem câu trả lời của tôi dưới đây. – stone

2

Thanh công cụ rất hài hước về những gì bạn đặt bên trong. Họ nhận được funny khi tất cả các yếu tố không phải là con trực tiếp của ToolBar. Các phần tử nhóm là ToolBarTray (nhóm thanh công cụ), ToolBar và ToolBarPanel (hợp lý, cho tràn tràn). Đây là những gì WPF muốn xem:

<Grid> 
    <ToolBarTray> 
     <ToolBar Height="Auto"> 
      <ToolBarPanel Orientation="Horizontal" ToolBar.OverflowMode="AsNeeded"/> 
      <MenuItem Header="Test1" /> 
      <Separator/> 
      <MenuItem Header="Test2" /> 
     </ToolBar> 
     <ToolBar Height="Auto"> 
      <ToolBarPanel ToolBar.OverflowMode="Never"/> 
      <MenuItem Header="Test3" /> 
      <MenuItem Header="Test4" /> 
      <Separator/> 
      <MenuItem Header="Test5" /> 
      <ToolBarPanel ToolBar.OverflowMode="AsNeeded"/> 
      <MenuItem Header="Test6" /> 
      <MenuItem Header="Test7" /> 
     </ToolBar> 
    </ToolBarTray> 
</Grid> 
+0

Không phải ToolBarPanels có chứa các MenuItems và Separator không? Khi bạn làm điều đó, Dấu phân tách vẫn được định hướng của nó. Nếu các ToolBarPanels không được chứa các MenuItem, việc ràng buộc khả năng hiển thị của ToolBarPanel sẽ không hiển thị/ẩn các MenuItem cùng với nó. – kenwarner

4

Đặt mặc định theo chiều ngang.

Dấu phân cách được đặt trực tiếp bên trong thanh công cụ có kiểu của chúng thay đổi, vì Thanh công cụ ghi đè kiểu mặc định của các mục của nó. Các thiết bị tách được đặt ở nơi khác có được phong cách mặc định của bộ tách. Vì vậy, bạn sẽ cần phải phong cách tách mình nếu bạn muốn giữ nó bên trong StackPanel.

This CodeProject discussion bao gồm mã mẫu để hoàn thành việc này.

tham khảo: WPF Unleashed bởi Adam Nathan, trang 117.

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