c# - 使用文本框 c# 填写列表视图
问题描述
我想填写一个我们使用文本框的树视图,但我有一个无法保存的问题
如何在树视图的文本框中显示文本字段输入。
附上允许我完成树视图的 XAML 代码和 C# 代码。
<Grid Grid.Column="0">
<TabControl Margin="0,0,0,24" Name="SideTabControl" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
<TabItem Name="OutlineTabItem" HorizontalAlignment="Center" IsSelected="True">
<TreeView Name="bookmark_tree" RenderTransformOrigin="0.741,2.29" >
<TextBox x:Name ="txtBookmarkName" Margin="0,0,0,0" KeyDown="TxtBookmarkName_OnKeyDown" Visibility="Hidden" />
</TreeView>
<TabItem.Header>
<Image Source="../../Shared/Resources/IconImage/signet.png" Height="14" OpacityMask="#FFF0410E"
ToolTipService.ShowDuration="2000"/>
</TabItem.Header>
<ToolTipService.ToolTip>
<ToolTip Placement="Bottom">
<TextBlock Text="Liste des Signets"/>
</ToolTip>
</ToolTipService.ToolTip>
</TabItem>
</TabControl>
/// <summary>
/// Méthode permettre l'ajoute d'un signet à une page d'un document.
/// </summary>
/// <param name="sender">Objet</param>
/// <param name="e">Evenement</param>
private void bookmark_Click(object sender, RoutedEventArgs e)
{
txtBookmarkName.Visibility = Visibility.Visible;
txtBookmarkName.Focus();
}
/// <summary>
/// Méthode permettre de Remplissez le contrôle d'arborescence de signets avec des éléments de signets.
/// </summary>
/// <param name="item">Signet à ajouter.</param>
/// <param name="nodes">Liste des items.</param>
static void BuildBookmarkTree(Bookmark item, ItemCollection nodes)
{
for (int i = 0; item.IsValid(); item = item.GetNext(), ++i)
{
TreeViewItem new_node = new TreeViewItem();
new_node.Header = item.GetTitle();
ToolTipService.SetToolTip(new_node, new_node.Header);
nodes.Add(new_node);
new_node.Tag = item;
if (item.IsOpen()) new_node.IsExpanded = true;
if (item.HasChildren()) // Ajouter récursivement des sous-arbres d'enfants
{
BuildBookmarkTree(item.GetFirstChild(), new_node.Items);
}
}
}
private void TxtBookmarkName_OnKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Return)
{
// Récupère le document actuel
//PDFDoc doc = PdfViewer.GetDoc();
PDFDoc doc = this.PdfViewWpf.CurrentDocument;
// Lock document
PdfViewer.DocLock(true);
// Permet de créér d'abord les éléments favoris du signet.
string bookmarkName = txtBookmarkName.Text + ":" + PdfViewer.GetCurrentPage().ToString();
Bookmark myBookmark = pdftron.PDF.Bookmark.Create(doc, bookmarkName);
// Ajouter le signet à la racine.
doc.AddRootBookmark(myBookmark);
// Nous pouvons maintenant associer de nouveaux signets à des destinations de page:
Destination bookmark_destination = Destination.CreateFit(doc.GetPage(PdfViewer.GetCurrentPage()));
myBookmark.SetAction(pdftron.PDF.Action.CreateGoto(bookmark_destination));
// Ajout pour actualiser l'arborescence de la visionneuse.
BuildBookmarkTree(myBookmark, bookmark_tree.Items);
// Unlock the document after we are done
PdfViewer.DocUnlock();
PdfViewHelper.Save(this.PdfViewer, doc);
txtBookmarkName.Text = string.Empty;
}
}
解决方案
好吧,有很多方法可以获取自定义字符串,这取决于您想要实现的目标以及它如何在您的 UI 中很好地工作。
从我看到的屏幕截图中,我认为您可以无缝地做到这一点的一种方法是TextBox
在单击书签按钮时触发它在书签按钮下方可见。该框将具有键盘焦点,因此您可以轻松键入所需的书签标题,并在按“返回”时触发您已有的事件处理程序,只需替换:
string bookmarkName = "Mon signet sur la page: " +
PdfViewer.GetCurrentPage().ToString();
和
txtBookmarkName.Text + ": " +
PdfViewer.GetCurrentPage().ToString();
txtBookmarkName.Text = string.Empty();
下面的一些代码示例:
文本框的 XAML:
<TextBox x:Name"txtBookmarkName" Margin="0,0,0,0" KeyDown="TxtBookmarkName_OnKeyDown" Visibility="Hidden"/>
(边距值是占位符,您需要根据您的 UI 更改这些以定位和调整框的大小)
文本框的事件处理程序:
private void TxtBookmarkName_OnKeyDown(object sender, KeyEventArgs e)
{
txtBookmarkName.Visible = false;
if (e.Key == Key.Return)
{
//Run bookmark_Click Event Handler Code
}
}
(您可能希望为是否按下 Escape 以取消文本框以及如果文本框失去焦点添加一个事件)
您的书签按钮的代码,以便可以使 TextBox 可见并获得焦点:
private void Button_Click(object sender, RoutedEventArgs e)
{
txtBookmarkName.Visibility = Visibility.Visible;
txtBookmarkName.Focus();
}
推荐阅读
- javascript - jQuery:从附近元素获取文本内容并打印到模式标题
- python - 抽象类中的递归 - Python
- javascript - 单击谷歌下拉项目时触发警报
- python - 使用 numpy.roll 对例程进行矢量化
- magento2 - 1 x Magento 2.2.x 多存储多域不工作
- c# - 为什么从投影创建的整数变量不能递增?
- github - Github 算不算持续集成?如果不是,Github 和持续集成有什么区别?
- javascript - 减少 React-Redux 状态和调度样板
- python - 计算熊猫组内的重复值和唯一值
- java - 如何将 Sting `8.1.009.125` 转换为 `double` 数组?爪哇