2010-07-15 62 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