2013-07-31 37 views
0

我這樣做有以下結構:WPF禁用列表框自動調整大小的均勻網格

<UniformGrid HorizontalAlignment="Stretch" Grid.Row="0" VerticalAlignment="Top" Columns="6" DockPanel.Dock="Right" > 
    <StackPanel HorizontalAlignment="Stretch"> 
     <DockPanel Background="#FF393939" > 
      <Label Content="{lex:Loc Site}" Foreground="#FFE0E0E0"/> 
     </DockPanel> 
     <ListBox Height="300" ItemsSource="{Binding Sites.View}" DisplayMemberPath="Name.ActualTranslation"> 
     </ListBox> 
    </StackPanel>... 

這些stackpanels我UniformGrid應該在整個主窗口(或視圖)...仍然被鋪展如果在一個項目一個Listbox有一個較長的字符串,它需要比標準寬度更多的位置來自動填充字符串,而且我必須垂直滾動。

我不想讓listview獲得寬度,如果內容沒有足夠的地方。 我也有我的主窗口一個ScrollViewer中在該視圖放置...

我能做些什麼,統一電網保持像主窗口-...

我已經嘗試過相同的寬度給一個名字到主窗口和綁定寬度是這樣的:Width="{Binding ElementName=MainWindow, Path=ActualWdith}" ..

雖然我得到的錯誤:

Cannot find source for binding with reference 'ElementName=MainWindow'. BindingExpression:Path=ActualWdith; DataItem=null;

我能做些什麼來解決這個問題是起訴? 如果您需要更多信息或者我的錯誤描述不清楚請不要猶豫。

UPDATE: 就應該是這樣: enter image description here

行爲當文本太長: enter image description here 和滾動條出現在底部..

+1

綁定到ActualWidth似乎是一個壞主意,但它不應該是必要的。如果拉伸的話,'UniformGrid'應該保持相同的大小。你能展示你所看到的截圖嗎? –

+0

我已更新我的問題 – JuHwon

回答

1

如果您嘗試訪問一個WPF對象的名稱,它需要有x:Key="name",這在上面的代碼中沒有顯示,即

<Window x:Name="MainWindow" .... 

或者你可以走回來了樹,直到找到正確類型的對象,

Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MainWindow}, Path=ActualWidth}" 
0

或者你可以簡單地改變你的方式顯示文本來約束其寬度

<ListBox Height="300" ItemsSource="{Binding Sites.View}" DisplayMemberPath="Name.ActualTranslation"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding}" TextWrapping="Wrap" MaxWidth="200"/> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

我不知道列表框或包含文本塊的MaxWidth ...因爲這是相對於窗口的大小。 – JuHwon