2016-01-21 36 views
0

在XAML中,我有這樣的:約束一個列表框,如果它是在面板的增長,而不是如果有更多的項目添加到列表中唯一增長

<!--The listing of the items--> 
<ListBox DockPanel.Dock="Left" ItemsSource="{Binding View}" 
     IsSynchronizedWithCurrentItem="True" 
     SelectionMode="Single" 
     Width="{Binding Source={StaticResource ListWidth}}" 
     x:Name="lstBox"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <Run Text="{Binding alabel}" /> 
      </TextBlock> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

在同一DockPanel中在列表框的生活,我有另一個可以在高度上變化的控件(但不是動態的),讓我們稱這個控件爲B.因此,列表框和B存在於用戶控件中,我們稱它爲Master。

當Master被實例化時,B的高度被設置,然後它不再變化。在我的窗口中,我可以有幾個大師,其中一些比其他人高。如果列表框佔據與B相同的高度,則可以。如果B隨着項目添加到列表框中而增大,則不太好。

因此,在本質上我該如何實現以下目標:

  • ,如果它的增長是由於另一個控制在尺寸增加的列表框只能生長
  • 列表框不能生長,如果我只需添加更多的項目它。

回答

1

在我寫這個問題時,答案就出現在我的腦海裏。

的解決方案是:

  1. 給控制B中的名稱。
  2. 給列表框一個MinHeight。
  3. 在列表框,將其綁定的身高爲B的的ActualHeight和它的模式作爲OneTimeOnly

這樣:

<ListBox DockPanel.Dock="Left" ItemsSource="{Binding View}" 
     IsSynchronizedWithCurrentItem="True" 
     SelectionMode="Single" 
     Width="{Binding Source={StaticResource ListWidth}}" 
     Height="{Binding ElementName=controlB, Path=ActualHeight, Mode=OneTime}" 
     x:Name="lstBox"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock> 
      <Run Text="{Binding thing}" /> 
      </TextBlock> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

這導致在列表框具有它的大小一次,並以該控制的B;然後在添加項目時再也不會再增長。

相關問題