【问题标题】:WPF populate treeview selection into a textboxWPF 将树视图选择填充到文本框中
【发布时间】:2013-03-11 23:10:36
【问题描述】:

感谢任何帮助。我对 WPF 很陌生。我有一个由 xml 文件填充的树视图。选择树视图项目后,我需要它显示在文本框中。我有一个弹出窗口中的树view,我有它让它选择了所讨论的文本框时,它将带上树视图的弹出窗口,提示用户在TreeView上进行选择。之后,它应该将该树视图选择放回同一个文本框中。这是我的代码:

    <TextBox Name="text"
    Text="{Binding Path=SelectedItem.name, ElementName=dirTree}"
    Style="{StaticResource CustomTextBoxStyle}"
    Grid.Column="1"
    Margin="47,326,110,140"
    TextChanged="text_TextChanged" />

还有树视图部分:

    <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="{Binding ElementName=dirTree, Path=SelectedItem}"/&gt; 怎么编译??,你似乎试图将Eventhandler(SelectedItemChanged) 绑定到它自己的SelectedItem(对象)?
  • 弹出框的触发器是我希望将树视图选择重新填充到的同一文本框。这就是我尝试要做的事情。

标签: wpf textbox treeview


【解决方案1】:

在 TreeView 中的 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();
    }

}

个性我建议您使用 MVVM 和属性绑定,以便在 xaml 和代码隐藏之间实现良好的解耦。

【讨论】:

  • 谢谢。这对一些人有帮助。它将“System.Xml.XmlElement”返回到文本框中,而不是选择(应该类似于“Zone A”),但至少它现在返回了一些东西。
  • 尝试将 e.NewValue 转换为 XmlElement 并从中提取值。
猜你喜欢
  • 2013-07-10
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多