C# 部分ListView被切断
我使用这段代码将均匀的宽度分布到所有列,但它仍然通过其父列,生成一个水平滚动C# 部分ListView被切断,c#,wpf,pdf,C#,Wpf,Pdf,我使用这段代码将均匀的宽度分布到所有列,但它仍然通过其父列,生成一个水平滚动 private void listView_SizeChanged(object sender, SizeChangedEventArgs e) { var newWidth = listView.ActualWidth / gridView.Columns.Count; foreach (var column in gridView.Columns) {
private void listView_SizeChanged(object sender, SizeChangedEventArgs e)
{
var newWidth = listView.ActualWidth / gridView.Columns.Count;
foreach (var column in gridView.Columns)
{
column.Width = newWidth;
}
}
因此,当我将其转换为PDF文件时,它会生成如下内容:
我已经将列表视图的宽度调整为A4纸的宽度。哦,这张纸是字母大小的,这就是为什么右边有一个白色间距
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");
}
}
是什么导致了这种行为?虽然我可以一点一点地减少宽度,但这会有点耗时。或者我需要这样做吗?要删除水平滚动,请尝试在XAML中设置ListView的
ScrollViewer.HorizontalScrollBarVisibility
(附加属性)
<ListView x:Name="listView" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ... >
...
</ListView>
要在XAML中使用此值转换器,请将其添加为资源。传递给converts Convert()方法的值是整个listview的宽度。我们希望返回该值除以列数。例如,使用四个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>
...
...
测试文本
我对ListView不太熟悉,但可以从实际宽度中减去2并将其除以,或者尝试将所有列的宽度设置为*。我想我确实需要一些尝试和错误来解决这个问题,因为您的水平滚动条要么是四舍五入“错误”,要么是涉及到边框。您还可以在运行时检查窗口。Visual studio 2015和2017具有内置功能。黑条功能?不一定。边框并不总是可见的,但充当另一个控件的容器。在任何情况下,请在运行时检查listview并查看列,以及它们是否包装在宽度或厚度大于0的容器控件中。它仍然会生成一个水平滚动条,尽管ScrollViewer。HorizontalScrollBarVisibility
确实删除了滚动条。没关系,它起作用了。忘了取下旧的敞篷车,我可以帮忙。
<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>