2010-07-15 32 views
1

我試圖創建具有一個切換按鈕/頭的超薄酒吧的擴張左邊,但是當在窗口的其餘部分擴展罷了,甚至超過材料的已經在那了。WPF:如何做一個擴展溢出,並填寫窗口

我真的不知道該怎麼辦的最好的辦法是。我想也許是一個2列的網格。首先是膨脹機,其次是其他材料。接下來,我將有一個觸發器,當擴展器IsExpanded時將第二列的寬度設置爲零。

我真的不知道如何得到那個工作,甚至如何正確地做到這一點。

下面是一些代碼示例:

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition Name="SecondColumn" Width="*" /> 
     </Grid.ColumnDefinitions> 


     <Expander ExpandDirection="Right" IsExpanded="True"> 

      <Expander.Resources> 
       <Style TargetType="Expander"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="Expander" > 

           <ControlTemplate.Triggers> 
            <Trigger Property="IsExpanded" Value="True" > 
             <Setter TargetName="SecondColumn" Property="ColumnDefinition.Width" Value="0" /> 
            </Trigger> 
           </ControlTemplate.Triggers> 

          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </Expander.Resources> 

      <ListBox > 
       <ListBox.ItemsPanel> 
        <ItemsPanelTemplate> 
         <UniformGrid /> 
        </ItemsPanelTemplate> 
       </ListBox.ItemsPanel> 
      </ListBox> 
     </Expander> 

     <TabControl Grid.Column="1" /> 

    </Grid> 

我wan't列表框展開時待觀察,否則TabControl的

任何想法?

回答

1

這聽起來像你想要做類似的東西Karl Shifflett's example here。他只是修改在這種情況下控制內容的Z-index和手動設置行高給一個彈出式的幻想,所以你要確保你不是想ZIndex其他視覺元素與此類似。

您需要確保您在Expander上設置了ColumnSpanRowSpan,以便在展開時覆蓋這些行的內容。

+0

感謝您指出了這一點,但我認爲我只會用這個作爲最後的手段,它只是感覺像這樣的黑客,我擔心這可能容易折斷。 – 2010-07-15 15:11:33

+0

你可以去的另一件事是切換到由ToggleButton和Popup控件組成的虛擬擴展器自定義控件。這樣彈出窗口將保證顯示在那裏出現的任何東西。不過,您只需自己創建控件。 – 2010-07-15 15:17:20

+0

我會檢查一下。而且我也嘗試了另一種解決方案,除了擔心主窗口的大小和大小,它可能沒問題。猜我可以將它綁定在一起來解決這個問題。 – 2010-07-15 16:23:06