2013-03-11 129 views
0

任何幫助表示讚賞。我對WPF很陌生。我有一個樹形視圖正在填充一個XML文件。當選擇樹視圖項目時,我需要它顯示在文本框中。我在彈出窗口中使用了treeview,並且已經獲得了它,這樣當選中的文本框被選中時,它將彈出一個treeview提示用戶在樹視圖上進行選擇。之後,它應該將該樹視圖選擇放回到同一個文本框中。這裏是我的代碼:WPF填充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> 
+1

你在做什麼'SelectedItemChanged =「{Binding ElementName = dirTree,Path = SelectedItem}」/>'這甚至編譯??,你似乎試圖綁定一個'Eventhandler'(SelectedItemChanged)到它的擁有'SelectedItem'(對象)??? – 2013-03-12 00:29:56

+0

彈出框的觸發器是與我希望樹視圖選擇重新插入的相同文本框。這就是我**想要做的事情。 – Nallware 2013-03-12 13:27:19

回答

1

從樹視圖中創建的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和後臺代碼之間一個很好的去耦。

+0

謝謝。這有助於一些。它將「System.Xml.XmlElement」返回到文本框中,而不是選擇(應該像「Zone A」),但至少它現在正在返回一些東西。 – Nallware 2013-03-12 13:29:08

+1

嘗試將e.NewValue轉換爲XmlElement並從中提取值。 – 2013-03-12 14:57:43