2017-03-27 10 views
-1

を私はすべての列にも、幅配布するために、このコードを使用していますが、それはまだのので、水平スクロールに一部がカットオフされている

private void listView_SizeChanged(object sender, SizeChangedEventArgs e) 
    { 
     var newWidth = listView.ActualWidth/gridView.Columns.Count; 
     foreach (var column in gridView.Columns) 
     { 
      column.Width = newWidth; 
     } 
    } 

WPF List View

を生産、その親を通過私はすでにリストビューを調整し

PDF List View

:私はPDFファイルに変換する場合、これは、それがこのような何かを作り出しますこの動作の原因は何右

public void CreateMyWPFControlReport() 
    { 

     FixedDocument fixedDoc = new FixedDocument(); 
     PageContent pageContent = new PageContent(); 
     FixedPage fixedPage = new FixedPage(); 
     someGrid.Children.Remove(listView); 
     listView.Width = 96 * 8.267; 
     //Create first page of document 
     fixedPage.Children.Add(listView); 
     ((System.Windows.Markup.IAddChild)pageContent).AddChild(fixedPage); 
     fixedDoc.Pages.Add(pageContent); 
     //Create any other required pages here 


     MemoryStream lMemoryStream = new MemoryStream(); 
     { 
      Package package = Package.Open(lMemoryStream, FileMode.Create); 
      XpsDocument xpsd = new XpsDocument(package); 
      XpsDocumentWriter xw = XpsDocument.CreateXpsDocumentWriter(xpsd); 
      xw.Write(fixedDoc); 
      xpsd.Close(); 
      package.Close(); 
     } 

     var pdfXpsDoc = PdfSharp.Xps.XpsModel.XpsDocument.Open(lMemoryStream); 
     try 
     { 
      PdfSharp.Xps.XpsConverter.Convert(pdfXpsDoc, @"C:/nye/affaf.pdf", 0); 
     } 
     catch (IOException ex) 
     { 
      MessageBox.Show("File is open, please close first"); 
     } 
    } 

に白の間隔がある理由です、さんはA4 paper.Ohと同じ幅、そして紙はレターサイズのでしょうか?幅を少しずつ小さくすることはできますが、それは少し時間がかかります。または私はそれを行う必要がありますか?

+0

私はListviewsには慣れていませんが、実際の幅から2を引いて、それを分割するか、すべての列の幅を*に設定してみてください。 –

+0

これを解決するには、試行錯誤が本当に必要だと思っています。 – Swellar

+0

水平スクロールバーの理由は丸め誤差です。実行時にウィンドウを検査することもできます。ビジュアルスタジオ2015および2017には、そのためのインビルド機能があります。 –

答えて

1

水平スクロールを削除するには、XAMLでListViewのScrollViewer.HorizontalScrollBarVisibility(添付プロパティ)を設定してみてください。

<ListView x:Name="listView" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ... > 
    ...  
</ListView> 

ListViewのすべてのGridViewColumnsに均等な幅を割り当てるには、値コンバータを使用できます。 GridViewColumnの幅を再評価する必要がある場合(アプリケーションのサイズ変更後など)、WPFはコンバーターのConvert()メソッドを自動的に呼び出します。

public class ListViewEvenColumnWidthConverter : IValueConverter 
{ 
    public int ColumnCount { get; set; } 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value == null) 
      return 0; 

     double width = (double)value; 

     if (width == 0) 
      return 0; 

     return width/ColumnCount; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

この値コンバータをXAMLで使用するには、リソースとして追加します。コンバータConvert()メソッドに渡されるvalueは、リストビュー全体の幅です。その値を列数で割った値を返したいとします。たとえば、4つのGridViewColumnsを使用します。

<Window.Resources> 
    <local:ListViewEvenColumnWidthConverter x:Key="EvenColumnWidthConverter" ColumnCount="4" /> 
</Window.Resources> 

... 

<ListView x:Name="listView" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Date" Width="{Binding ElementName=listView, Path=ActualWidth, Converter={StaticResource EvenColumnWidthConverter}}" /> 
      <GridViewColumn Header="Supplier" Width="{Binding ElementName=listView, Path=ActualWidth, Converter={StaticResource EvenColumnWidthConverter}}" /> 
      <GridViewColumn Header="Product" Width="{Binding ElementName=listView, Path=ActualWidth, Converter={StaticResource EvenColumnWidthConverter}}" /> 
      <GridViewColumn Header="Quantity Sold" Width="{Binding ElementName=listView, Path=ActualWidth, Converter={StaticResource EvenColumnWidthConverter}}" /> 
      ... 
     </GridView> 
    </ListView.View> 
     Test Text 
</ListView> 
+0

'ScrollViewer.Horizo​​ntalScrollBarVisibility'が本当にスクロールバーを削除しても、それでも水平スクロールバーを生成します。 – Swellar

+0

気にしないで、うまくいった。古いコンバータを削除するのを忘れました – Swellar

+0

私は助けることができてうれしいです。 – Fredrik

関連する問題