簡體   English   中英

給定內部模板元素時訪問控制項

[英]accessing control item when given inner template element

我有一個TreeviewItem ,其style設置為此

    <Style x:Key="TreeViewItemStyle" TargetType="TreeViewItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="TreeViewItem">
                        <StackPanel x:Name="stackpanel" Orientation="Horizontal">
                            <CheckBox x:Name="checkbox_treeview" Checked="treeView_AfterCheck" Unchecked="treeView_AfterCheck"/>
                            <Image x:Name="image_treeview" Width="16"/>
                            <local:WPFEditableTextBlock x:Name="label_TreeView" Text="{TemplateBinding Header}"/>
                        </StackPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

我可以通過執行此操作來訪問模板的checkbox

TreeViewItem folderNode = new TreeViewItem();
Style style = this.FindResource("TreeViewItemStyle") as Style;
folderNode.Style = style;
ControlTemplate controlTemplate = folderNode.Template;
var templatedControl = folderNode.Template.LoadContent() as FrameworkElement;
CheckBox chbx = (CheckBox)templatedControl.FindName("checkbox_treeview");

一旦能夠訪問此checkbox ,便可以轉到已checked事件處理程序。 在其中,我希望能夠訪問包含該checkboxtreeViewItem ,但是我不知道如何執行此操作。 請幫幫我!!!

要從模板中定義的checkbox訪問treeViewItem ,可以通過xaml在Tag屬性中將其傳遞,如下所示:

 <ControlTemplate TargetType="TreeViewItem">
                    <StackPanel x:Name="stackpanel" Orientation="Horizontal">
                        <CheckBox x:Name="checkbox_treeview" Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}}}" Checked="treeView_AfterCheck" Unchecked="treeView_AfterCheck"/>
                        <Image x:Name="image_treeview" Width="16"/>
                        <local:WPFEditableTextBlock x:Name="label_TreeView" Text="{TemplateBinding Header}"/>
                    </StackPanel>
 </ControlTemplate>

以及如何從事件處理程序中檢索它:

private void treeView_AfterCheck(object sender, RoutedEventArgs e)
{
     var tvi = ((sender as CheckBox).Tag as TreeViewItem);
}

暫無
暫無

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

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