簡體   English   中英

從 WPF.xaml 在 C# 訪問 TreeView

[英]access TreeView from WPF .xaml in C#

我需要幫助訪問 C# 中創建的 TreeView.xaml。 我正在創建一個簡單的 TreeView,它將從文檔中收集所有“圖層”,並使用它們的名稱和其他屬性填充 TreeView。 作為起點,我只需要名稱,然后我將添加更多屬性。

.xaml如下:

<Window x:Class="TestWPFAlpha.DocumentStructureWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:TestAlpha"
        mc:Ignorable="d"
        Closing="Window_Closing"
        Title=" Document Structure" Height="600" MinHeight="600" MaxHeight="600" Width="400" MinWidth="400" MaxWidth="400" ScrollViewer.VerticalScrollBarVisibility="Visible">
    <Grid x:Name="gridDocumentStructure" x:FieldModifier="public">
        <Menu Height="25" Margin="0,0,0,0" VerticalAlignment="Top" FontSize="14" Background="#FF3C4B64" Foreground="White">
            <MenuItem Header="Search" />
            <MenuItem Header="Close" Height="25" Click="buttonCloseDocumentStructureWindow_Click"/>
        </Menu>
        <TreeView x:Name="TreeViewDocumentStructure" x:FieldModifier= "public" Background="#FFEBEBEB" Margin="10,35,10,10">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Members}">
                    <TextBlock Text="{Binding Name}"/>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>
    </Grid>
</Window>

在 C# 我有:

// all necessary using statements and the two below, that are specific thar I need in this method
using static TestWPFAlpha.DocumentStructureWindow;
using static DocumentLayers.LayerManagerWindow;
...

和一個按鈕的事件如下:

public static void DocumentStructure_Click(object sender, RoutedEventArgs e)
{
    if (documentStructureWindow == null)
    {
        documentStructureWindow = new TestWPFAlpha.DocumentStructureWindow();
        documentStructureWindow.Show();
    }
    else
    {
        documentStructureWindow.Activate();
    }
    var tds = new TestWPFAlpha.DocumentStructureWindow.gridDocumentStructure.TreeViewDocumentStructure();
    System.Type canvasType = typeof(System.Windows.Controls.Canvas);
    int count = 0;
    foreach (UIElement uie in TestWPFAlpha.MainWindow.canvasGrid.Children)
    {
        if (uie.GetType() == canvasType && count > 0)
        {
            sb.AppendLine(Layers[count - 1].Name);
            TreeViewItem newChild = new TreeViewItem();
            // Layers are from DocumentLayers.LayerManagerWindow
            newChild.Header = Layers[count - 1].Name;
            tds.Items.Add(newChild);
        }
        count++;
    }
}

在第 49 行

var tds = new TestWPFAlpha.DocumentStructureWindow.gridDocumentStructure.TreeViewDocumentStructure();

我收到錯誤:

類型名稱“gridDocumentStructure”在類型“DocumentStructureWindow”中不存在

非常感謝幫助。

您要求的示例。 這只是使用代碼隱藏的基本內容

帶有樹視圖的 window:

<Window x:Class="TestWPFAlpha.DocumentStructureWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:TestWPFAlpha"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Grid x:Name="gridDocumentStructure" x:FieldModifier="public">
    <Menu Height="25" Margin="0,0,0,0" VerticalAlignment="Top" FontSize="14" Background="#FF3C4B64" Foreground="White">
        <MenuItem Header="Search" />
        <MenuItem Header="Close" Height="25" Click="buttonCloseDocumentStructureWindow_Click"/>
    </Menu>
    <TreeView x:Name="TreeViewDocumentStructure" x:FieldModifier= "public" Background="#FFEBEBEB" Margin="10,35,10,10">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Members}">
                <TextBlock Text="{Binding Name}"/>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>
</Grid>

它創建了一個新的 window:

usings...;

namespace TestWPFAlpha
{
    public partial class DocumentStructureWindow : Window
    {
        public DocumentStructureWindow()
        {
            InitializeComponent();

            var newWin = new Window1(this);
            newWin.Show();  

        }
    }
}

newWin有一個按鈕,它可以實現我認為你想要實現的目標:

    public partial class Window1 : Window
{
    private DocumentStructureWindow _documentStructureWindow;

    public Window1(DocumentStructureWindow documentStructureWindow)
    {
        InitializeComponent();
        _documentStructureWindow = documentStructureWindow;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        var tds = _documentStructureWindow.TreeViewDocumentStructure;
        tds.Items.Add(new TreeViewItem() { Header = DateTime.Now.ToString("yyMMdd_HHmmss_fff")} );
    }
}

在這里看到它:回購

但我會推薦 mvvm & commands 而不是這個代碼背后的解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM