2017-05-09 125 views
-1

我準備了我自己的DataTemplate以顯示我自己的Item類別對象。要設置我使用綁定到ViewportWidthScrollViewer的寬度。這就是:視口寬度比實際視圖窗口稍寬WPF

<DataTemplate x:Key="MyItemTemplate"> 
     <Grid Margin="5" HorizontalAlignment="Stretch" 
       Width="{Binding ViewportWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ScrollViewer}}}"> 
      ... 
     </Grid> 
    </DataTemplate> 

我如何顯示數據:

<TabItem Header="Shop"> 
      <!--<ScrollViewer>--> 
       <ListView Name="ShopListView" ItemsSource="{Binding itemList}" 
         ItemTemplate="{StaticResource MyItemTemplate}" 
         ItemContainerStyle="{StaticResource alternatingListViewItemStyle}" 
         AlternationCount="2" 
         ScrollViewer.CanContentScroll="True" 
         /> 
      <!--</ScrollViewer>--> 
</TabItem> 

問題是grid使我的DataTemplate是sliglty更廣 - 它重疊View Window的右邊框。在他們的右邊緣

編輯 The problem is visible on the right side 按鈕被切斷。

<Style x:Key="alternatingListViewItemStyle" TargetType="{x:Type ListViewItem}"> 
     <Style.Triggers> 
      <!-- setting up triggers for alternate background colors --> 
      <Trigger Property="ItemsControl.AlternationIndex" Value="1"> 
       <Setter Property="Background" Value="#FF4C85FF"></Setter> 
      </Trigger> 
      <Trigger Property="ItemsControl.AlternationIndex" Value="2"> 
       <Setter Property="Background" Value="#FFFF8C7C"></Setter> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
+0

嗯,我看你有很多[** margin **](https: //msdn.microsoft.com/en-us/library/system.windows.frameworkelement.margin(v=vs.110).aspx)錯誤,我猜:P – elgonzo

+0

刪除'Margin =「5」'還沒有解決了問題:/ –

+0

嗯,不知道。如果你也許可以添加一個屏幕截圖,顯示問題的具體表現方式。這可能有助於瞭解發生的事情。從你的問題的XAML片段並沒有多少... – elgonzo

回答

1

由ListView爲每個項目生成的項目容器元素的默認樣式合併了一些填充。這意味着渲染項目的寬度通常略小於視口寬度。

要不讓物品穿過視口的右邊框,可以將物品容器的填充設置爲零。這可以通過物品容器的簡單樣式輕鬆完成。既然你已經提供了一個item容器的樣式,你可以讓它設置padding屬性。

但是,這可能沒有必要。要在整個視圖端口寬度上拉伸項目內容,您不需要將項目模板中的Grid.Width屬性綁定到ListView.ViewPortWidth。它可以做得更簡單:通過相應地設置它的HorizontalContentAlignment,可以指示物品容器水平拉伸物品內容。這當然也可以用物品容器樣式完成。

下面的示例樣式(基於您的問題中給出的樣式)演示了設置HorizontalContentAlignmentPadding屬性。如果你想保持物品和ListView邊框之間的默認填充,只需省略我例子中的Padding setter:

<Style x:Key="alternatingListViewItemStyle" TargetType="{x:Type ListViewItem}"> 

    <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
    <Setter Property="Padding" Value="0" /> 

    <Style.Triggers> 
     <!-- setting up triggers for alternate background colors --> 
     <Trigger Property="ItemsControl.AlternationIndex" Value="1"> 
      <Setter Property="Background" Value="#FF4C85FF"></Setter> 
     </Trigger> 
     <Trigger Property="ItemsControl.AlternationIndex" Value="2"> 
      <Setter Property="Background" Value="#FFFF8C7C"></Setter> 
     </Trigger> 
    </Style.Triggers> 
</Style>