2013-09-03 6 views
6

My expanding menuWPF jak zrobić treści ekspander ruch

Witam Pragnę dodać kontroli WPF do ElementHost w mojej aplikacji WinForms. Zachowanie mojej kontroli jest przedstawione na obrazku. Chciałbym rozszerzyć każdy ekspander, aby zmienić wielkość kontrolki widoku drzewa na mniejszy. I na początku chciałbym, żeby moje ekspandery zostały zawalone.

próbowałem czegoś tak:

<UserControl x:Class="LeftPane" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" > 
<Grid VerticalAlignment="Stretch" Margin="3,3,3,3"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/>    
    </Grid.RowDefinitions> 
    <TreeView Grid.Row="0" Name="treeView1" VerticalAlignment="Stretch" > 

    </TreeView> 
    <StackPanel Grid.Row="1" Name="StackPanel1" VerticalAlignment="Bottom"> 
     <ListBox SelectedIndex="1"> 
      <ListBoxItem VerticalAlignment="Stretch"> 
       <Expander Grid.Row="1" ExpandDirection="Down" Header="expander1" VerticalAlignment="Stretch" Name="expander1" IsExpanded="False"> 
        <ListBox> 
         <ListBoxItem Content="Unit 1"/> 
         <ListBoxItem Content="Unit 2"/> 
        </ListBox> 
       </Expander> 
      </ListBoxItem> 
      <ListBoxItem VerticalAlignment="Stretch"> 
       <Expander Grid.Row="2" ExpandDirection="Down" Header="expander2" VerticalAlignment="Stretch" Name="expander2" IsExpanded="False"> 
        <ListBox> 
         <ListBoxItem Content="Unit 1"/> 
         <ListBoxItem Content="Unit 2"/> 
        </ListBox> 
       </Expander> 
      </ListBoxItem> 
     </ListBox> 
    </StackPanel> 
</Grid> 

oraz:

public void AddControl(ElementHost host) 
    { 
     this.parentHost = host; 
     host.Child = this; 
     this.Height = host.Size.Height; 
     treeView1.MaxHeight = this.Height - 60; 

    } 

Ale to nie działa poprawnie. Co więcej, chciałbym zmienić wielkość tej kontrolki podczas zmiany rozmiaru okna winForms.

Czy ktoś może mi pomóc jak ustawić Aligment itp

Odpowiedz

5

To jak by to osiągnąć ... Po pierwsze, chciałbym zmienić Grid do następujących elementów:

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

To dostarczy dwa Expander kontrole jak najwięcej przestrzeni, ile potrzebują i TreeView z cała reszta:

<TreeView Grid.Row="0" Name="treeView1" /> 
<Expander Grid.Row="1" Header="expander1" Name="expander1" IsExpanded="False"> 
    <ListBox> 
     <ListBoxItem Content="Unit 1"/> 
     <ListBoxItem Content="Unit 2"/> 
    </ListBox> 
</Expander> 
<Expander Grid.Row="2" Header="expander2" Name="expander2" IsExpanded="False"> 
    <ListBox> 
     <ListBoxItem Content="Unit 1"/> 
     <ListBoxItem Content="Unit 2"/> 
    </ListBox> 
</Expander> 
+1

To sprawia, że ​​jeden ekspander pojawia się na innym. Co więcej, kontrola nie jest skalowana, gdy zmieniam rozmiar okna nadrzędnego WinForms. – santBart

+0

@santBart Załóżmy, że Sheridan oznaczało Grid.Row = "2" na drugim ekspanderze – Alex

+0

Dzięki @voo. Przepraszam, mój błąd ... Zaktualizowałem teraz swój kod. – Sheridan

0

aby mój sterowania zmiennym rozmiarze, Zmieniłem funkcję Dock w ElementHost na Fill.