2013-03-11 2 views
0

Любая помощь приветствуется. Я очень новичок в WPF. У меня есть дерево, которое заполняется XML-файлом. Когда элемент treeview выбран, мне нужно, чтобы он отображался в текстовом поле. У меня есть древовидная структура внутри всплывающего окна, и у меня это получается так, что когда выбранный текстовый ящик выбран, он отобразит всплывающее окно с деревом, в котором пользователь предложит сделать выбор в дереве. После этого он должен вернуть этот древовидный вид обратно в одно текстовое поле. Вот мой код:WPF заполняет выбор дерева в текстовое поле

<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> 
+1

Что вы здесь делаете? SelectedItemChanged = "{Binding ElementName = dirTree, Path = SelectedItem}" /> 'как это вообще компилируется? Кажется, вы пытаетесь связать« Eventhandler »(SelectedItemChanged) с его собственный 'SelectedItem' (объект) ??? –

+0

Триггер для всплывающего окна - это одно и то же текстовое поле, в котором я хочу, чтобы в дереве отображался выбор. Это то, что я пытаюсь сделать **. – Nallware

ответ

1

Создать обработчик события на событие SelectedItemChanged от вашего TreeView и оттуда, обновить 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 и отделенным кодом.

+0

Спасибо. Это помогает некоторым. Он возвращает «System.Xml.XmlElement» в текстовое поле вместо выделения (что должно быть что-то вроде «Zone A»), но по крайней мере теперь оно что-то возвращает. – Nallware

+1

попробуйте применить e.NewValue к элементу XmlElement и извлечь из него значение. –

Смежные вопросы