WPF将treeview选择填充到文本框中
感谢您的帮助。我对WPF很陌生。我有一个由xml文件填充的树视图。当选择treeview项目时,我需要它显示在文本框中。我有一个弹出窗口里面的treeview,我有它,这样当有问题的文本框被选中时,它会弹出一个带有treeview的弹出窗口,提示用户在treeview上进行选择。之后,它应该将树视图选择放回同一个文本框中。这是我的密码:WPF将treeview选择填充到文本框中,wpf,textbox,treeview,Wpf,Textbox,Treeview,感谢您的帮助。我对WPF很陌生。我有一个由xml文件填充的树视图。当选择treeview项目时,我需要它显示在文本框中。我有一个弹出窗口里面的treeview,我有它,这样当有问题的文本框被选中时,它会弹出一个带有treeview的弹出窗口,提示用户在treeview上进行选择。之后,它应该将树视图选择放回同一个文本框中。这是我的密码: <TextBox Name="text" Text="{Binding Path=SelectedItem.name, ElementNa
<TextBox Name="text"
Text="{Binding Path=SelectedItem.name, ElementName=dirTree}"
Style="{StaticResource CustomTextBoxStyle}"
Grid.Column="1"
Margin="47,326,110,140"
TextChanged="text_TextChanged" />
和treeview部分:
<Popup PlacementTarget="{Binding ElementName=text}"
VerticalOffset="20"
HorizontalOffset="-180"
Margin="0,0,465,279"
Name="popup1"
AllowsTransparency="True"
Placement="Top">
<Popup.Style>
<Style TargetType="{x:Type Popup}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=text, Path=IsFocused}"
Value="True">
<Setter Property="IsOpen"
Value="True" />
</DataTrigger>
<!--<DataTrigger Binding="{Binding ElementName=popupText, Path=IsFocused}"
Value="True">
<Setter Property="IsOpen"
Value="True" />
</DataTrigger>-->
</Style.Triggers>
</Style>
</Popup.Style>
<Grid>
<Border BorderThickness="2"
Background="DodgerBlue"
BorderBrush="DodgerBlue"
Padding="0"
CornerRadius="6">
<ScrollViewer Height="300"
Name="scrollViewer1"
Width="175"
BorderBrush="Black"
Background="DodgerBlue">
<TreeView Name="dirTree"
ItemsSource="{Binding Source={StaticResource xmldata}, XPath=.}"
VirtualizingStackPanel.IsVirtualizing="False"
VirtualizingStackPanel.VirtualizationMode="Standard"
GotFocus="TreeView1_GotFocus"
SelectedItemChanged="{Binding ElementName=dirTree, Path=SelectedItem}"/>
</ScrollViewer>
</Border>
</Grid>
</Popup>
从树视图中为SelectedItemChanged事件创建一个事件处理程序,然后在此更新TextBlock.Text
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TreeView x:Name="demoTreeView"
Margin="10"
SelectedItemChanged="demoTreeView_SelectedItemChanged">
</TreeView>
<TextBlock x:Name="demoTextBox" Grid.Row="1"/>
</Grid>
在.cs文件中:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
demoTreeView.Items.Add("test1");
demoTreeView.Items.Add("test2");
demoTreeView.Items.Add("test3");
demoTreeView.Items.Add("test4");
}
private void demoTreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
demoTextBox.Text = e.NewValue.ToString();
}
}
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
demoreeview.Items.Add(“test1”);
demoreeview.Items.Add(“test2”);
demoreeview.Items.Add(“test3”);
demoreeview.Items.Add(“test4”);
}
私有void demoreeview\u SelectedItemChanged(对象发送方,RoutedPropertyChangedEventArgs e)
{
demoTextBox.Text=e.NewValue.ToString();
}
}
Personalty我建议您在属性上使用MVVM和绑定,以便在xaml和后面的代码之间实现良好的解耦。您在这里做什么
SelectedItemChanged=“{Binding ElementName=dirTree,Path=SelectedItem}”/>
这是如何编译的呢???,您似乎正在尝试绑定一个Eventhandler
(SelectedItemChanged)到它自己的SelectedItem
(对象)??弹出框的触发器位于我希望将treeview选择填充回的同一文本框上。这就是我正在尝试做的。谢谢。这会有所帮助。它将“System.Xml.XmlElement”返回到文本框中,而不是返回选择(应该类似于“Zone A”),但至少它现在返回了一些东西。尝试将e.NewValue强制转换为XmlElement并从中提取值。