2013-12-08 21 views
1

在我的應用程序中,我有一個列表框,其中包含一個帶有文本塊項目的堆棧面板。文本塊項目具有文字環繞或文本修剪屬性,以避免文本塊項目滑動到可見範圍之外。Windows Phone應用程序 - 如何根據設備寬度使文本環繞

據我所知,文本環繞和文本修剪屬性需要固定寬度來插入換行符。出於這個原因,我設置一個固定的寬度爲標題(寬度=「456」)和描述(寬度=「432」):

<ListBox x:Name="CategoryList" ItemsSource="{Binding}"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <StackPanel Orientation="Horizontal" Margin="0,0,0,17"> 
     <StackPanel> 
      <TextBlock 
      Style="{StaticResource PhoneTextLargeStyle}" 
      Text="{Binding Name}" 
      TextTrimming="WordEllipsis"          
      Width="456"          
      /> 
      <TextBlock 
      Style="{StaticResource PhoneTextSubtleStyle}" 
      Margin="12,-6,12,0" 
      Text="{Binding ContentDescription}" 
      TextWrapping="Wrap"                
      Width="432"          
      /> 
     </StackPanel> 
     </StackPanel> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

現在的問題是,當我打開手機時,水平模式的固定寬度太小。有沒有一種方法可以根據設備寬度來代替固定寬度的寬度?

截圖: enter image description here

+0

我目前的解決方案是,當一個「方向改變」事件發生時設置一個不同的(也是固定的)寬度。但是還有其他解決方案嗎? –

回答

1
一般它從來沒有在XAML一個好主意,用固定的寬度/高度(「整體」頁面(100%)),因爲XAML的目的是要爲你做這項工作

,所以你可能會專注於你的佈局,這項技術涵蓋了不同屏幕和尺寸的方面。

所以,如果你使用固定的寬度來顯示某物。在整個頁面上其非常好的指標東西是錯的

在你的情況你有使用StackPanels錯誤。 StackPanels的設計方式是,它們的尺寸不限於的方向。這意味着,已經將其方向設置爲水平的StackPanel可能在寬度上不確定地增長,並且具有設置爲垂直的方向的sp不會限制其高度。

現在這導致我們到你的問題:你已經在一個不確定高度增長的元素(兩個堆棧面板)中使用了一個寬度不斷增長的元素。 儘管你可能會通過一些技巧限制它們的大小(例如,這可以通過一些數據綁定來實現),但這不是應該做的。

我會說 - 因爲在父級StackPanel中沒有任何堆疊 - 將其替換爲其他面板/容器(或者只是刪除它),並且問題將消失。

<DataTemplate> 
<!-- If you need more child elements uncomment the following line --> 
<!-- <Grid> --> 
<StackPanel Margin="0,0,0,17"> 
    <TextBlock ... /> 
    <!-- no need to set width on the following textblock --> 
    <TextBlock ... TextWrapping="Wrap" /> 
</StackPanel> 
<!-- </Grid> --> 
</DataTemplate> 
+0

我刪除了我的第二個StackPanel,並用「」替換了我的第一個StackPanel。之後,我刪除了我的文本塊的寬度。這就是訣竅!謝謝。 :) –

相關問題