这个问题是我提出的问题的后续问题,并在此处得到解答:How to display XPS document using a selected combobox item
我使用VB 2010创建了一个WPF应用程序。我通过XAML设置了组合框。但是,我似乎无法弄清楚如何将每个项目的值设置为文件路径。
目标是让用户能够从下拉列表中选择项目,然后该选择将在DocumentViewer中打开XPS文件。以下代码由COMPETENT_TECH(感谢)提供给我,以便在DocumentViewer中读取和显示所选组合框的值。
我要打开的文件的路径是C:\ folder \ file.xps
Private Sub Button4_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button4.Click
Try
Dim sFileName As String
sFileName = DirectCast(ComboBox1.SelectedValue, String)
If Not String.IsNullOrEmpty(sFileName) Then
Dim theDocument As New System.Windows.Xps.Packaging.XpsDocument(sFileName, System.IO.FileAccess.Read)
DocumentViewer1.Document = theDocument.GetFixedDocumentSequence()
End If
Catch ex As Exception
MessageBox.Show("ERROR: " & ex.Message)
End Try
End Sub
提前感谢您的协助。
更新
这是我正在使用的XAML:
<ComboBox Width="Auto" IsReadOnly="True" IsEditable="True" Name="ComboBox1" Height="Auto" Margin="0" Padding="1" Grid.Column="2">
<ComboBoxItem>123456</ComboBoxItem>
<ComboBoxItem>123457</ComboBoxItem>
<ComboBoxItem>123458</ComboBoxItem>
</ComboBox>
答案 0 :(得分:1)
根据精确指定加载组合框的xaml的方式,您可能希望更改此行:
Dim theDocument As New System.Windows.Xps.Packaging.XpsDocument(sFileName, System.IO.FileAccess.Read)
为:
Dim theDocument As New System.Windows.Xps.Packaging.XpsDocument(System.IO.Path.Combine("C:\folder", sFileName & ".xps"), System.IO.FileAccess.Read)
我们在新代码中所做的就是将存储文件的目录与从组合框中检索到的文件名结合起来。
<强>更新强>
从组合框中检索值的正确方法是:
If ComboBox1.SelectedValue IsNot Nothing Then
sFileName = DirectCast(ComboBox1.SelectedValue, ComboBoxItem).Content.ToString()
End If
答案 1 :(得分:0)
我强烈建议您将数据绑定与 ComboBox 一起使用。
创建类如下的类:
Class XPSDocumentInfo
{
Public Property Title As String
Public Property FileName As String
}
创建ObservableCollection(Of XPSDocumentInfo)
并将其绑定到 ComboBox 的 ItemsSource 。
在 ComboBox 上使用DisplayMemberPath="Title"
属性,以便它将使用 Title 属性在下拉列表中显示文本,但由于您绑定了类型 XPSDocumentInfo <的集合, ComboBox 的 SelectedItem 属性,返回类型为 XPSDocumentInfo 的对象。
例如,
sFileName = DirectCast(ComboBox1.SelectedValue, String)
将更改为
sFileName = DirectCast(ComboBox1.SelectedItem, XPSDocumentInfo).FileName